Re: каждый раз, когда вы пишете i++ + ++i...
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 19.06.14 16:03
Оценка: 45 (2)
Здравствуйте, Кодт, Вы писали:

Тут с коллегой прокопали ещё пару фактов.

1. Кроме -fno-strict-overflow, проблема лечится -fno-aggressive-loop-optimizations. Последний появился в 4.8 и формально включен на всех уровнях (а реально — RTFS'ить надо).

2. А вот ещё более суровый вариант:

#include <stdio.h>       

int main()
{
    int i, j, x = 27;
    for (i=0, j=0; i < 10; ++i, ++j)
    {
        printf("%d : %d : %d\n", i, j*1000000000, x);
        if (x==1) break;
        x = x%2 ? x*3+1 : x/2;
    }
    return 0;
}


Запускаем (4.8 или 4.9, -O2):

$ ./kodt 
0 : 0 : 27
1 : 1000000000 : 82
2 : 2000000000 : 41


это всё, оно остановилось.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.