[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Чёртов язык Си!



On Tue, 7 Oct 2014, Artem Chuprina wrote:

yuri.nefedov@gmail.com -> debian-russian@lists.debian.org  @ 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

Reply to: