我的编译器将其扩展为199711L。 那是什么意思? 我读__cplusplus> 199711L表示C ++ 11。 什么是这个宏的可能的扩展?它意味着什么?
Answer 1:
该199711L代表年份= 1997,月= 11(即1997年十一月) - 当委员会批准的标准的ISO的其余部分在1998年初批准的日期。
对于2003年的标准,很少有足够的变化,该委员会(显然)决定离开这个值不变。
对于2011年的标准,它需要被定义为201103L,(再次,年= 2011,月= 03)再次意思是该委员会批准的标准为完成2011年3月的。
为2014年标准,它需要被定义为201402L,解释相同的方式,上述(2014年2月)。
对于2017年的标准,它需要被定义为201703L(三月2017)。
原标准被批准之前,相当多的编译器通常它定义为0
(或只是像一个空定义#define __cplusplus
)来表示“不符合”。 当问及他们的严格的一致性,许多它定义为1
。
我差点忘了提,而是古老的编译器多了一个趣闻:几个Cfront的最早版本(可能复制它几等)定义c_plusplus
而非__cplusplus
。 我不记得它被定义为任何有意义的值,但。
Answer 2:
这意味着,它与1997年的C ++标准(实际上是被称为C ++ 98兼容的,因为他们花了太长时间来批准它..
Answer 3:
我认为预处理器定义了不同的版本应该进入SD-6:
#define __cpp_1997 199711L
#define __cpp_2003 __cpp_1997
#define __cpp_2011 201103L
#define __cpp_2014 201402L
#define __cpp_2017 201703L
展望21世纪20年代,我们可能有三个标准。 我不怀疑,很多执行者将有代码,以支持标准从1997年开始。
我一想助记符定义,所以我不会有继续回来到这个职位。
文章来源: How are the __cplusplus directive defined in various compilers?