Почему следующий цикл не работает бесконечно? Я ожидаю, что, достигнув 65535, i
должен переполняться до нуля.Почему это бесконечный цикл?
#include<stdio.h>
int main()
{
short int i = 0; //(assume short int is 2 bytes)
for(i<=5 && i>=-1; ++i; i>0)
printf("%u\n", i);
return 0;
}
EDIT
Что об этом
#include<stdio.h>
int main()
{
int x=1, y=1;
for(; y; printf("%d %d\n", x, y))
{
y = x++ <= 5;
}
printf("\n");
return 0;
}
Он прекрасно работает и печатает
2 1
3 1
4 1
5 1
6 1
7 0
Что делает это прекратить?
Это неопределенное поведение и компилятор может сделать сделать это в своем роде !!! –
Я не думаю, что это неопределенное поведение. Петля заканчивается просто потому, что условие завершения было достигнуто из-за переполнения. –
Re: отредактируйте. «Что заставляет его прекратить?» Тот факт, что 'y' становится' 0'. –