LINUX.ORG.RU

История изменений

Исправление 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%