Почему я не получаю предупреждение «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 не предупреждает о неинициализированной переменной потому что в моем случае веток нет)

(Звучит как ошибка, но это так тривиально, что мне интересно, не пропустил ли я что-то огромное.)

Ответы на вопрос(1)

Ваш ответ на вопрос