On Tue, 7 Oct 2014, Artem Chuprina wrote:
[email protected] -> [email protected] @ Tue, 7 Oct 2014
22:14:17 +0400 (MSK):
y> Возвращаясь же к примеру, мое предложение было написать что-то типа
y> typedef void* struct_S_ptr;
y> и вызывать
y> f((struct_S_ptr)0);
y> И предупреждений не будет и читаемость сохранится.
Это понятно. Но с моей кочки зрения задача как раз состоит в том, чтобы
предупреждения БЫЛИ. Чтобы, если я пытаюсь подсунуть указатель не на
то, меня компилятор за руку схватил.
А чтобы компиляция НЕ прошла (т.е. компилятор хватал за руку
радикально), придумали -Werror.
И кстати, судя по "enabled by default" в тексте предупреждения, бывает,
видимо, еще и disabled, когда такое действие считается за ошибку, а не
за предупреждение. Но под рукой доки нет, а задать гуглу вопрос так,
чтобы он меня вывел на ответ, что для этого надо сказать gcc, я не
сумел.
В этом отношении clang хорош. Сразу пишет и о флагах:
error: incompatible pointer types assigning to 'int *' from
'double *' [-Werror,-Wincompatible-pointer-types]
В gcc этого флага нет, зато есть -Wconversion
(Warn for implicit conversions that may alter a value.)
И еще есть -Wc++-compat:
Warn about ISO C constructs that are outside of the common subset
of ISO C and ISO C++, e.g. request for implicit conversion from
"void *" to a pointer to non-"void" type.
Ю.
p.s. кстати это из man gcc