LINUX.ORG.RU

История изменений

Исправление 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 знаковая арифметика делается детерминистично как и беззнаковая.