Ответ 1
Сделайте переменные volatile
. Читает и записывает изменчивые переменные считаются наблюдаемыми:
volatile x = 1;
volatile y = 0;
volatile z = x / y;
По причинам тестирования я хотел бы вызвать деление на ноль в моем коде на С++. Я написал этот код:
int x = 9;
cout << "int x=" << x;
int y = 10/(x-9);
y += 10;
Я вижу на экране "int = 9", но приложение не сбой. Это из-за некоторых оптимизаций компилятора (я компилирую с gcc)? В чем может быть причина?
Сделайте переменные volatile
. Читает и записывает изменчивые переменные считаются наблюдаемыми:
volatile x = 1;
volatile y = 0;
volatile z = x / y;
Потому что y
не используется, его оптимизируют.
Попробуйте добавить cout << y
в конец.
В качестве альтернативы вы можете отключить оптимизацию:
gcc -O0 file.cpp
Деление на ноль - это поведение undefined. Не сбой также является довольно хорошим подмножеством потенциально бесконечного числа возможных поведений в области поведения undefined.
Как правило, деление на ноль генерирует исключение. Если он не обрабатывается, он сломает программу, но она не сработает.