在编译时检测是否禁用了异常

use*_*108 3 c++ exception

我试图在编译时检测是否已使用(-fno-exceptions)开关禁用了异常.我试过评价:

noexcept(throw)

但是如果在gcc和clang下禁用了异常,则无法编译.

编辑:看看这里.

Pau*_*l R 6

与往常一样,使用给定的命令行参数集检查为特定编译器预定义了哪些宏是相当容易的:

$ g++ -dM -E -x c++ - < /dev/null &> except.txt
$ g++ -dM -E -x c++ -fno-exceptions - < /dev/null &> no-except.txt
$ sdiff -s except.txt no-except.txt 
#define __EXCEPTIONS 1                            <
#define __cpp_exceptions 199711                   <
$
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢 DIY 方法。 (2认同)

Mat*_*son 5

__cpp_exceptions启用例外时,符号由gcc设置.然后添加一个宏,无论是扩展为空还是异常处理.这里的文档中有一些示例:

https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_exceptions.html

至少clang在这个意义上与gcc兼容 - 您可能需要在Microsoft(或MS兼容)编译器中使用不同的变体.我根据选项的名称假设gcc和/或clang.