我正在编写一个C ++库,我想让我的API抛出无效参数的异常,但是当使用-fno-exceptions
编译代码时,依赖于assert。
有没有办法在编译时检测是否允许我使用异常处理?
请注意,我正在编写一个仅限标头的库,因此我没有configure
阶段,并且我无法访问构建系统来简单地在命令行上定义宏(并且
我不想给用户增加负担。)
由于标准没有“-fno-exceptions”的任何概念,当然解决方案可能依赖于编译器。在这种情况下,我对使用g ++和clang ++的解决方案感兴趣,其他编译器对于这个项目并不重要。
非常感谢
答案 0 :(得分:15)
GCC和Clang在启用例外时定义__EXCEPTIONS
宏,并且在通过 -fno-exceptions
禁用例外时不定义它。
示例:
#include <cstdio>
int main() {
#ifdef __EXCEPTIONS
puts("Exceptions are enabled");
#else
puts("Exceptions are disabled");
#endif
}