Деление на ноль: неопределенное поведение или реализация, определенная в C и/или C++?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Деление на ноль: неопределенное поведение или реализация, определенная в C и/или C++?

Сообщение Anonymous »

Что касается деления на ноль, стандарты гласят:


C99 6.5.5p5 — Результатом оператора / является частное от деление первого операнда на второй; Результатом оператора % является остаток. В обеих операциях, если значение второго операнда равно нулю, поведение не определено.

C++03 5.6.4 — Бинарный оператор / возвращает частное, а бинарный оператор % возвращает остаток от деления первого выражения на второе. Если второй операнд / или % равен нулю, поведение не определено.


Если бы мы приняли приведенные выше абзацы за чистую монету, ответ, очевидно, Неопределенное поведение для обоих языков. Однако, если мы посмотрим дальше в стандарте C99, мы увидим следующий параграф, который кажется противоречивым(1):


C99 7.12p4 - Макрос INFINITY расширяется до постоянного выражения типа float, представляющего положительную или беззнаковую бесконечность, если таковая имеется;


Есть ли в стандартах какой-то вид из золота правило, согласно которому неопределенное поведение не может быть заменено (потенциально) противоречивым утверждением? За исключением этого, я не думаю, что было бы неразумно заключить, что если ваша реализация определяет макрос INFINITY, то деление на ноль определяется как таковое. Однако если ваша реализация не определяет такой макрос, поведение будет неопределенным.

Мне интересно, каков консенсус (если таковой имеется) ) по этому поводу для каждого из двух языков. Изменится ли ответ, если мы будем говорить о целочисленном делении int i = 1/0 и о делении с плавающей запятой float i = 1,0/0,0 ?

Примечание (1) В стандарте C++03 говорится о библиотеке , которая включает макрос INFINITY.


Подробнее здесь: https://stackoverflow.com/questions/300 ... c-and-or-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»