История изменений
Исправление hateyoufeel, (текущая версия) :
Выкинь свои компиляторы.
> cat loop.c
#include <stdio.h>
int main() {
int const F = 1000000000;
int x = 0;
for(int y = 0; y < 7; ++y)
{
printf("x=%d, y=%d\n", x, y);
x += F; // UB
}
return 0;
}
> clang loop.c -o loop -O2 -Wall
> ./loop
x=0, y=0
x=1000000000, y=1
x=2000000000, y=2
x=-1294967296, y=3
x=-294967296, y=4
x=705032704, y=5
x=1705032704, y=6
Исправление hateyoufeel, :
Выкинь свои компиляторы.
> cat loop.c
#include <stdio.h>
int main() {
int const F = 1000000000;
int x = 0;
for(int y = 0; y < 7; ++y)
{
printf("x=%d, y=%d\n", x, y);
x += F; // UB
}
return 0;
}
> clang loop.c -o loop -O2 -Wall
> ./loop
x=0, y=0
x=1000000000, y=1
x=2000000000, y=2
x=-1294967296, y=3
x=-294967296, y=4
x=705032704, y=5
x=1705032704, y=6%
Исходная версия hateyoufeel, :
Выкинь свои компиляторы.
> cat loop.c
#include <stdio.h>
int main() {
int const F = 1000000000;
int x = 0;
for(int y = 0; y < 7; ++y)
{
printf("x=%d, y=%d", x, y);
x += F; // UB
}
return 0;
}
> clang loop.c -o loop -O2 -Wall
> ./loop
x=0, y=0x=1000000000, y=1x=2000000000, y=2x=-1294967296, y=3x=-294967296, y=4x=705032704, y=5x=1705032704, y=6%