Почему я не получаю предупреждение «used неинициализированный» от gcc в этом тривиальном примере? [Дубликат]
На этот вопрос уже есть ответ:
Почему в объявлении нет цикла без инициализации в цикле for? 1 ответСнова глупая ошибка неинициализированной переменной в Как исправить эту ошибку сегментации в программе инверсии последовательности?.
Так что я собирался повторить "пожалуйста, используйте-Wall
flags "комментарий, но когда я проверил код на предмет предупреждений, я не обнаружил предупреждений, о которых я удивился.
Так что я сократил это до этого ниже (этот код не имеет смысла для целей выполнения, но он иллюстрирует то, что я хочу показать):
#include <stdio.h>
int main()
{
int i,len=12;
/* printf("%d\n",i); */
while(i!=len-1)
{
i++;
len--;
}
return 0;
}
при компиляции с использованиемgcc
4.7.3 и 6.2.1 используя
gcc -Wall -Wextra -pedantic
Я не получаю предупреждений, тогда какi
явно не инициализируется перед использованием вwhile
петля.
Теперь, если я раскомментируюprintf
заявление, которое я получаю:
warning: 'i' is used uninitialized in this function [-Wuninitialized]
Так почему предупреждение выдается при прохожденииi
вprintf
но не вwhile
тест
(Это отличается отgcc не предупреждает о неинициализированной переменной потому что в моем случае веток нет)
(Звучит как ошибка, но это так тривиально, что мне интересно, не пропустил ли я что-то огромное.)