В приведенном ниже коде я не уверен, почему я получаю предупреждение: итерация 5u вызывает неопределенное поведение [-Waggressive-loop-optimizations], когда я комментирую printf (""); в цикле for. Как заявление printf способствует этому предупреждению ?.предупреждение: итерация 5u вызывает неопределенное поведение [-Waggressive-loop-optimizations]
Во-вторых, этот код перейдет в бесконечный цикл. Я знаю, что индекс массива находится вне пределов при входе в цикл while. Но когда я получаю отрицательный результат, цикл должен быть прекращен. Но этого не происходит. Если i- выполняется до ввода цикла while, нет проблемы. Если индекс не связан, я должен просто получить результат от мусора. Но почему бесконечно!
int main (void)
{
int a[]={4,6,8,2,7};
int i=0;
int size = sizeof(a)/sizeof(a[0]);
for(i=0;i<size;i++)
{
// printf(" ");
}
// i--; // doing i-- works fine.
while(i>=0)
{
printf("%d\t",a[i]);
i--;
}
return(0);
}
Неопределенное поведение приводит к неопределенному поведению, и все может случиться. –
Когда вы обращаетесь к 'a [5]', все идет поскорее. Каково значение 'i' после цикла' for'? Итак, на первой итерации цикла while, каково его значение? Вот почему компилятор жалуется (и почему 'i -' разрешает проблему). –
Я согласен с вами в случае неопределенного поведения. Но здесь только неопределенное поведение, которое я вижу, - это когда вы печатаете [i] в первый раз внутри цикла while. Но в таком случае мусор печатается, я думаю. for loop используется только для увеличения индекса, и я не вижу никакой проблемы внутри цикла. Почему предупреждение указывает на цикл? – Rajesh