Существует ли флаг компилятора для gcc (Linux / MinGW), чтобы поднять деление на ноль ошибок во время выполнения?

У меня есть сложная модель, написанная на C ++, где знаменатели иногда оказываются нулями.
Обычно я проверяю их, но когда я забыл, их отладка — боль, поскольку модель продолжает работать без предупреждений.

Есть ли флаг компилятора, работающий в обеих последних версиях gcc в linux и MinGW для windows, который я могу использовать, чтобы сказать gcc для компиляции, чтобы вызвать ошибку времени выполнения, когда происходит (между двойными) деление на ноль?
Это вычислительно дорого (поэтому включить его только в отладочных сборках)?

Мне известен аналогичный вопрос, который был опубликован Вот, но ответы — это скорее смесь технических и теоретических быстрых комментариев, а не сложный ответ.

4

Решение

Для gcc в linux вы можете использовать fenv.h или начиная с c ++ 11 cfenf и на окнах есть _controlfp

1

Другие решения

Лучшее, что я могу сейчас найти, — это выполнить проверку в Linux и игнорировать ее в MinGW (_controlfp, похоже, не работает в моей установке).
В моем случае это не проблема, так как разработка в любом случае происходит в Linux:

#include <iostream>

#ifdef  __GNUC__
#ifndef __MINGW32__
//#define _GNU_SOURCE // contrary to other answers, this seems no longer  needed as defined by default
#include <fenv.h>
#endif
#endif

int main(int argc, char* argv[]){
#ifdef  __GNUC__
#ifndef __MINGW32__
feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW);
#endif
#endif
double num = 4.0;
double den = 0.0;
double ratio = num/den;
std::cout << "ratio: " << ratio << std::endl;
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector