Re[6]: Откуда эта лютая любовь к знаковым целым?
От: Evgeny.Panasyuk Россия  
Дата: 09.05.20 15:04
Оценка: 1 (1) +1
Здравствуйте, 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'ом
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.