如何在__cplusplus指令在不同的编译器定义的?(How are the __cplusplu

2019-06-25 12:18发布

我的编译器将其扩展为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?