如何检测我的代码是否在编译时带有-fno异常? 我正在编写一个C++库,我想让我的API抛出异常参数,但当代码被编译为“代码> -fNO异常< /代码>时,依赖于断言。”p>

如何检测我的代码是否在编译时带有-fno异常? 我正在编写一个C++库,我想让我的API抛出异常参数,但当代码被编译为“代码> -fNO异常< /代码>时,依赖于断言。”p>,c++,g++,clang++,C++,G++,Clang++,如果允许我使用异常处理,有没有办法在编译时检测? 请注意,我正在编写一个只包含标题的库,因此我没有configure阶段,也没有访问构建系统的权限,无法在命令行上定义宏(以及 我不想给用户增加负担) 由于该标准没有任何“-fno异常”的概念,因此解决方案当然可能依赖于编译器。在本例中,我对同时使用g++和clang++的解决方案感兴趣,其他编译器对本项目并不重要 非常感谢GCC和Clang在启用异常时定义\u异常宏,在通过-fno异常禁用异常时不定义它 例如: #include <cstd

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

由于该标准没有任何“-fno异常”的概念,因此解决方案当然可能依赖于编译器。在本例中,我对同时使用g++和clang++的解决方案感兴趣,其他编译器对本项目并不重要


非常感谢

GCC和Clang在启用异常时定义
\u异常
宏,在通过
-fno异常禁用异常时不定义它

例如:

#include <cstdio>
int main() {
#ifdef __EXCEPTIONS
    puts("Exceptions are enabled");
#else
    puts("Exceptions are disabled");
#endif
}
#包括
int main(){
#ifdef_uu异常
看跌期权(“例外情况已启用”);
#否则
看跌期权(“异常被禁用”);
#恩迪夫
}