Здравствуйте, watchmaker, Вы писали:
W>Здравствуйте, Кодт, Вы писали:
К>> где здесь чёрный ящик.
W> | тут |
| i*1000000000 — переполнение int — UB.
W>Так, например, в эксперименте с gcc и с INT_MAX == 231-1, компилятор вполне разумно считает, что без переполнения i не может быть больше 2. А раз 2 < 10, то и выход по условию (i < 10) невозможен, так что его и проверять не стоит. Впрочем другие компиляторы по другому чудят. |
| |
Что то у меня честно проверял i<10 на каждой итерации.
0 : 0 : 27
1 : 1000000000 : 82
2 : 2000000000 : 41
3 : -1294967296 : 124
4 : -294967296 : 62
5 : 705032704 : 31
6 : 1705032704 : 94
7 : -1589934592 : 47
8 : -589934592 : 142
9 : 410065408 : 71
sizeof(int)==4, arch==x86_64, gcc -4.4.7