Еще раз глупая неинициализированная ошибка переменной в Как исправить эту ошибку сегментации в программе инвертирования последовательности?.
Итак, я собирался повторить "пожалуйста, используйте комментарий -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 неспособностью предупредить о неинициализированной переменной, потому что в моем случае нет ветвей)
(Звучит как ошибка, но это настолько тривиально, что я задаюсь вопросом, не пропал ли я что-то огромное.)