如何在各种编译器中定义 __cplusplus 指令
How are the __cplusplus directive defined in various compilers?
我的编译器将其扩展到199711L。那是什么意思?我读到__cplusplus> 199711L 表示 C++11。这个宏的可能扩展是什么,它意味着什么?
199711L 代表 Year=1997, Month = 11(即 1997 年 11 月)——委员会批准 ISO 其余部分在 1998 年初批准的标准的日期。
对于2003年的标准,几乎没有足够的变化,委员会(显然)决定保持该值不变。
对于 2011 年标准,它需要定义为 201103L(同样,年份 = 2011,月份 = 03),再次意味着委员会批准了 2011 年 3 月最终确定的标准。
对于 2014标准,它需要定义为 201402L,解释方式与上述(2014 年 2 月)相同。
对于 2017标准,需要将其定义为 201703L(2017 年 3 月)。
对于 2020 年标准,该值已更新为 202002L(2020 年 2 月)。
对于 2023 标准,该值已更新为 202302L(2023 年 2 月)。
在原始标准被批准之前,相当多的编译器通常将其定义为0
(或只是一个空定义,如#define __cplusplus
)以表示"不符合"。当被问及最严格的一致性时,许多人将其定义为1
。
我差点忘了提,但还有一个关于古代编译器的花絮:一些最早的 cfront 版本(可能还有其他一些复制它的版本)定义了c_plusplus
而不是__cplusplus
。我不记得它被定义为任何有意义的值。
我认为各种版本的预处理器定义应该进入SD-6:
#define __cpp_1997 199711L
#define __cpp_2003 __cpp_1997
#define __cpp_2011 201103L
#define __cpp_2014 201402L
#define __cpp_2017 201703L
展望20世纪20年代,我们可能会再有三项标准。 我毫不怀疑,从1997年开始,许多实现者都会有代码支持标准。
我想要一个助记符定义,这样我就不必继续回到这篇文章了。
C++20 的__cplusplus值
根据 Acorn 的回答__cplusplus宏定义为基于链接 cpp.predefined(1.1) 的202002!这个定义也可以在这个cpp首选项中找到!搜索__cplusplus
此后已更新为202004
要了解它在Visual Studio Community 2019中Microsoft Visual C++的实际价值,请执行以下操作:
- 创建视觉C++项目
- 鼠标右键单击解决方案。
- 在下拉菜单中,单击底部的属性
- 将打开一个弹出对话框
- 单击"配置属性"将其展开
- 单击"C/C++"将其展开。
- 点击"所有选项"。
- 您应该在右侧找到"其他选项"
- 在此粘贴的相邻右列上:/std:c++latest/Zc:__cplusplus
- 您应该在右侧找到"其他选项"
- 点击"所有选项"。
- 单击"C/C++"将其展开。
,然后单击"确定"按钮
在函数 main() 中运行以下代码以获取 __cplusplus
int main()
{
long cppVer = __cplusplus;
std::cout << "__cplusplus value for C++20 is: ";
std::cout << std::to_string( cppVer ) << std::endl;
}
代码应显示以下内容:
__cplusplus value for C++20 is: 202004
它与1997年的C++标准兼容(实际上被称为C++'98,因为他们花了太长时间才批准它。
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在命名空间中定义函数还是限定函数
- 此代码是否违反一个定义规则
- 编译C++时未定义的引用
- 不同翻译单元中不可重载的非内联函数定义
- 为什么在定义函数之前先声明它
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何定义一个纯抽象基类