我正在编译一个使用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
这不起作用,因为“覆盖”不是符号。
我想要更简单地检查编译器版本以查看它是否是支持该关键字的版本之一。如果有的话,怎么办呢?
答案 0 :(得分:3)
我知道无法检查程序中的特定关键字。我能提供的最好的是检查特定编译器/编译器版本或语言/语言版本的特殊预定义宏。
对于前者,有
#if defined __GNUC__ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7))
对于后者,有
#if __cplusplus >= 201103L