Я пытаюсь скомпилировать простой код с помощью gcc и clang. gcc выдает предупреждение о несравненном приведении (отлично!). Однако clang не выдал никаких предупреждений! Я передал одни и те же аргументы для обоих:
cc -Wall -Wextra tmp3.c
gcc -Wall -Wextra tmp3.c
Я передаю все необходимые параметры компилятору clang или что-то упускаю? Clang документация не поможет!
Код:
int main(void)
{
void *b = (void *)0x12345678;
int a = (int)(unsigned long)b;
int c = (int)b;
return a + c;
}
Клэнг версии 3.8
-Weverything
. Эта опция (к сожалению, только на Clang) включает буквально каждое предупреждение. Вы правы, документация не очень полезна. - person Kyle Strand   schedule 16.07.2017-Weverything
, спасибо, что поделились. Он не выдал необходимого предупреждения, а вместо этого выдал мне:tmp3.c:7:2: warning: no newline at end of file [-Wnewline-eof]
Так впечатлил clang! - person DJJ   schedule 16.07.2017(int)(unsigned long)
. При явном приведении типов вы фактически сообщаете компилятору, что знаете, что делаете. - person Siguza   schedule 16.07.2017(int)(unsigned long)
, то я скажу компилятору, что знаю, что делаю. Однако, если я преобразую 64-битное значение в 32-битное (без каких-либо подсказок компилятору), я ожидаю, что компилятор предупредит меня. В любом случае, мой вопрос заключался в том, есть ли способ заставить clang генерировать предупреждение для этой ситуации или нет? - person DJJ   schedule 16.07.2017-Weverything
, теперь вы можете сами ответить на свой вопрос (и пометить его как принятый). - person Kyle Strand   schedule 25.07.2017