История изменений
Исправление firkax, (текущая версия) :
Ты свой софт стандартом компилируешь? Ну тогда страдай на радость графоманам.
Я компилирую gcc, у gcc UB зависит от опций компиляции. В частности, уже упомянутое if(a+1<a) для signed может устроить UB если включён режим -fstrict-overflow и не может если -fno-strict-overflow. В режиме -fno-strict-overflow знаковая арифметика делается детерминистично как и беззнаковая. Всмысле что signed int32 2147483640+10=-2147483646 всегда и строго.
Ну и конечно же все разумные люди этот strict-overflow всегда выключают. В том числе Линус где-то прямо писал (то ли про неё то ли про аналогичный генератор UB с указателями -fstrict-aliasing) что это вредительская фича компиляторов/стандартов и её следует игнорировать.
Исправление firkax, :
Ты свой софт стандартом компилируешь? Ну тогда страдай на радость графоманам.
Я компилирую gcc, у gcc UB зависит от опций компиляции. В частности, уже упомянутое if(a+1<a) для signed может устроить UB если включён режим -fstrict-overflow и не может если -fno-strict-overflow. В режиме -fno-strict-overflow знаковая арифметика делается детерминистично как и беззнаковая. Всмысле что signed int32 2147483640+10=-2147483646 всегда и строго.
Ну и конечно же все разумные люди этот strict-overflow всегда выключают. В том числе Линус где-то прямо писал что это вредительская фича компиляторов/стандартов и её следует игнорировать.
Исправление firkax, :
Ты свой софт стандартом компилируешь? Ну тогда страдай на радость графоманам.
Я компилирую gcc, у gcc UB зависит от опций компиляции. В частности, уже упомянутое if(a+1<a) для signed может устроить UB если включён режим -fstrict-overflow и не может если -fno-strict-overflow. В режиме -fno-strict-overflow знаковая арифметика делается детерминистично как и беззнаковая. Всмысле что signed int32 2147483640+10=-2147483646 всегда и строго.
Ну и конечно же все разумные люди этот strict-overflow всегда выключают. В том числе Линус где-то прямо писал что это вредительская фича компиляторов и её следует игнорировать.
Исправление firkax, :
Ты свой софт стандартом компилируешь? Ну тогда страдай на радость графоманам.
Я компилирую gcc, у gcc UB зависит от опций компиляции. В частности, уже упомянутое if(a+1<a) для signed может устроить UB если включён режим -fstrict-overflow и не может если -fno-strict-overflow. В режиме -fno-strict-overflow знаковая арифметика делается детерминистично как и беззнаковая. Всмысле что signed int32 2147483640+10=-2147483646 всегда и строго.
Исправление firkax, :
Ты свой софт стандартом компилируешь? Ну тогда страдай на радость графоманам.
Я компилирую gcc, у gcc UB зависит от опций компиляции. В частности, уже упомянутое if(a+1<a) для signed может устроить UB если включён режим -fstrict-overflow и не может если -fno-strict-overflow. В режиме -fno-strict-overflow знаковая арифметика делается детерминистично как и беззнаковая. Всмысле что signed int8 120+10=-126 всегда и строго.
Исходная версия firkax, :
Ты свой софт стандартом компилируешь? Ну тогда страдай на радость графоманам.
Я компилирую gcc, у gcc UB зависит от опций компиляции. В частности, уже упомянутое if(a+1<a) для signed может устроить UB если включён режим -fstrict-overflow и не может если -fno-strict-overflow. В режиме -fno-strict-overflow знаковая арифметика делается детерминистично как и беззнаковая.