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

时间:2014-08-12 08:00:13

标签: c++ g++ clang++

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

有没有办法在编译时检测是否允许我使用异常处理? 请注意,我正在编写一个仅限标头的库,因此我没有configure阶段,并且我无法访问构建系统来简单地在命令行上定义宏(并且 我不想给用户增加负担。)

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

非常感谢

1 个答案:

答案 0 :(得分:15)

GCC和Clang在启用例外时定义__EXCEPTIONS宏,并且在通过 -fno-exceptions禁用例外时不定义它。

示例:

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