如何检测我的代码是否使用-fno-exceptions进行编译?

gig*_*tes 11 c++ g++ clang++

我正在编写一个C++库,我想让我的API抛出无效参数的异常,但是在编译代码时依赖于assert -fno-exceptions.

如果允许我使用异常处理,有没有办法在编译时检测?请注意,我正在编写一个只有头的库,所以我没有configure阶段,我无法访问构建系统,只需在命令行上定义一个宏(我不想增加负担给用户).

由于标准没有"-fno-exceptions"的任何概念,当然解决方案可能依赖于编译器.在这种情况下,我对使用g ++和clang ++的解决方案感兴趣,其他编译器对于这个项目并不重要.

非常感谢你

Bri*_*ian 20

GCC和Clang在__EXCEPTIONS启用异常时定义宏,并且在通过 禁用异常时不定义宏-fno-exceptions.

例:

#include <cstdio>
int main() {
#ifdef __EXCEPTIONS
    puts("Exceptions are enabled");
#else
    puts("Exceptions are disabled");
#endif
}
Run Code Online (Sandbox Code Playgroud)