使用#ifdef检测编译器

时间:2009-08-05 13:58:02

标签: c++ exception c-preprocessor pgi

我正在尝试构建一个适用于多个平台和编译器的小代码。我使用断言,其中大部分都可以关闭,但是当使用pgicpp进行编译时,使用-mp进行OpenMP支持,它会自动使用--no_exceptions选项:我的代码中的任何地方都带有“ throw“语句生成致命的编译器错误。 (“禁用异常处理支持”)

我可以测试一个define d宏来隐藏PGI上的throw语句吗?我经常使用gcc,它有GCC_VERSION之类的东西。我在PGI中找不到任何描述这些宏的文档。

3 个答案:

答案 0 :(得分:12)

查看Sourceforge上的Pre-defined C/C++ Compiler Macros项目。

PGI的编译器有一个__PGI宏。

另外,请查看libnuwen's compiler.hh标头,以便“标准化”编译器版本控制宏。

答案 1 :(得分:4)

您可以尝试这样来查看编译器预定义了哪些宏:

pgcc -dM

也许这会显示出你可以使用的合适的宏。

答案 2 :(得分:0)

您是否看过提升标题?假设他们支持PGI,他们将找到一种方法来检测它。你可以用它。我会开始搜索boost/config中的某个地方。