У меня есть сложная модель, написанная на C ++, где знаменатели иногда оказываются нулями.
Обычно я проверяю их, но когда я забыл, их отладка — боль, поскольку модель продолжает работать без предупреждений.
Есть ли флаг компилятора, работающий в обеих последних версиях gcc в linux и MinGW для windows, который я могу использовать, чтобы сказать gcc для компиляции, чтобы вызвать ошибку времени выполнения, когда происходит (между двойными) деление на ноль?
Это вычислительно дорого (поэтому включить его только в отладочных сборках)?
Мне известен аналогичный вопрос, который был опубликован Вот, но ответы — это скорее смесь технических и теоретических быстрых комментариев, а не сложный ответ.
Для gcc в linux вы можете использовать fenv.h или начиная с c ++ 11 cfenf и на окнах есть _controlfp
Лучшее, что я могу сейчас найти, — это выполнить проверку в 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;
}