Здравствуйте, netch80, Вы писали:
EP>>Я выше примерчик привёлАвтор: Evgeny.Panasyuk
Дата: 09.05.20
.
N>Видел. Честные 0 итераций независимо от знаковости. Исправьте пример или не смешите мои тапочки (tm).
#include <iostream>
#include <climits>
using namespace std;
int main()
{
for(int i=INT_MAX-2; i>=0; ++i) {
cout << i << " ";
}
}
Вывод:
g++ -std=c++17 -O3 -Wall -pedantic main.cpp && ./a.out
main.cpp: In function 'int main()':
main.cpp:7:5: warning: iteration 2 invokes undefined behavior [-Waggressive-loop-optimizations]
7 | for(int i=INT_MAX-2; i>=0; ++i) {
| ^~~
main.cpp:7:27: note: within this loop
7 | for(int i=INT_MAX-2; i>=0; ++i) {
| ~^~~
2147483645 2147483646 2147483647 -2147483648 -2147483647 ... infinite loop
https://godbolt.org/z/3WkoMN
.L2:
mov esi, ebx
mov edi, OFFSET FLAT:_ZSt4cout
add ebx, 1
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
mov edx, 1
mov esi, OFFSET FLAT:.LC0
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)
jmp .L2
Таки закольцевался int, правда jmp'ом