Является ли переполнение со знаком все еще неопределенным поведением в gcc при использовании -fwrapv? - PullRequest
0 голосов
/ 02 марта 2019

Фон

По умолчанию переполнение со знаком является неопределенным поведением.

Мое понимание gcc (основано на https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html и Что делает -fwrapv? ) было то, что использование -fwrapv заставило gcc рассматривать переполнение подписи как четко определенное поведение.

Однако комментарии к другому вопросу , похоже, говорят, что переполнение со знаком все еще не определено, даже когда этот флагon.

Вопрос

Правильно ли определено переполнение со знаком в gcc с -fwrapv?Если нет, тогда какова цель -fwrapv?

1 Ответ

0 голосов
/ 02 марта 2019

Учитывая документация GCC говорит:

-fwrapv

Эта опция указывает компилятору допустить, что знаковое арифметическое переполнение сложения, вычитания и умноженияоборачивается с использованием представления с двумя дополнениями.

Я бы охарактеризовал это как специфичное для реализации расширение, которое обеспечивает четко определенное поведение для того, что в противном случае было бы неопределенным поведением в стандартном C - тогда и только тогда, когда базовыйаппаратные средства ведут себя таким образом.

Педантично, я бы сказал, что по стандарту C это все еще неопределенное поведение, но вы указываете компилятору действовать определенным, непереносимым, но предсказуемым образом.

...