4

我正在编译一个使用 C++ 关键字“覆盖”的 C++ 程序。

我在 Visual Studio 2010 中编译成功,但现在需要在 g++ 上编译。只有 g++ 4.6 可用(并且您需要 g++ 4.7 来支持“覆盖”)。

真正的解决方案是安装 g++ 4.7(现在正在发生),但这让我开始思考。是否有编译时检查以查看是否支持关键字?

我试过:

#ifndef override
    #define override
    #ifdef BUILD_WINDOWS
        #pragma message("The \"override\" keyword is not supported on this compiler!  Ignoring it!")
    #else
        #warning "The \"override\" keyword is not supported on this compiler!  Ignoring it!"
    #endif
#endif

这不起作用,因为“覆盖”不是符号。

我想要更通用的东西,而不是简单地检查编译器版本以查看它是否是支持关键字的版本之一。如果有的话,如何做到这一点?

4

1 回答 1

4

我不知道从程序中检查特定关键字的方法。我能提供的最好的方法是检查特定编译器/编译器版本或语言/语言版本的特殊预定义宏。

对于前者,有

#if defined __GNUC__ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7))

对于后者,有

#if __cplusplus >= 201103L
于 2013-01-14T06:20:17.633 回答