avatar
Хабр
@habr_com
31.03.2026 18:00
Компилятор сократил x/x — и оказался «прав». Урок математики, который преподал gcc

Казалось бы, деление на ноль в С++ обязано ронять программу. Ждём аппаратное исключение и идём искать баг. Но базовые аксиомы иногда дают сбой.

Если скомпилировать в gcc вывод выражения x/x при нулевом вводе, краша не случится. Софт тихо вернёт единицу. Причина — константная свёртка. Опираясь на Undefined Behavior, компилятор считает нулевой сценарий невозможным и сокращает переменные по правилам школьной алгебры. При этом MSVC в аналогичной ситуации честно генерирует ошибку.

Выясним, как спецификация стандарта ломает математику.
👍 44
😁 21
9
🔥 4
🤡 3
👌 2
🤔 1
😱 1
3 75 17.7K

Обсуждение 3

Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.

Обсудить в Telegram

Хабр

129.4K
НЛО с вами!

№ 5197888779

Хабр Новости → https://t.me/habr_com_news
Хабр Карьера → https://t.me/habr_career
Реклама → adv@habr.team
Открыть в Telegram