C++ 如何使用C++&引用;功能测试宏“;?

C++ 如何使用C++&引用;功能测试宏“;?,c++,gcc,compiler-flags,dialect,C++,Gcc,Compiler Flags,Dialect,要测试功能,请参考以下功能测试宏: 如果编译器中存在该功能,则定义宏。但我不明白为什么,如果定义,它们被定义为“代码> 201606”/Cord>之类的东西,我相信它是“强> C++版本,而不是编译器< /强> ./p> 例如,我正在使用一个最新版本的GCC,它的-std=c++17功能\uuucpp\ulib\uhardware\uinterference\usize。宏是未定义的,我认为这意味着GCC没有该功能,尽管尝试使用c++17(和c++2a)开关的8.2.1。在这种情况下,记录值的

要测试功能,请参考以下功能测试宏:

如果编译器中存在该功能,则定义宏。但我不明白为什么,如果定义,它们被定义为“代码> 201606”/Cord>之类的东西,我相信它是“强> C++版本,而不是编译器< /强> ./p> 例如,我正在使用一个最新版本的GCC,它的
-std=c++17
功能
\uuucpp\ulib\uhardware\uinterference\usize
。宏是未定义的,我认为这意味着GCC没有该功能,尽管尝试使用c++17(和c++2a)开关的8.2.1。在这种情况下,记录值的意义是什么:

\uuuuuCPP\uLib\uHardware\uInterference\u201703尺寸

(在CPPPreference链接中)?

基于,它说:

以下宏将展开为对应于 功能已包含在工作表中的年份和月份 草稿

当特征发生显著变化时,宏将被更新 因此


因此,您可以检查功能是否存在检查宏是否已定义。或者,您可以根据宏值检查功能版本。

在我看来,这只是未来的验证,因此,如果功能被视为不完整且需要在标准的未来版本中进行更新,则可以区分更新前和更新后。