C预处理器是否与C预处理器相同?
我想知道C ++和C的预处理器有多不同。
问题的原因是这个问题是关于预处理器特定的问题,其中解决问题的标准段落有不同的措辞(和不同的段落编号),也是关于C ++中的false
关键字的区别。
那么,还是有更多的差异,或者这是唯一的区别。
问题的一个扩展是什么时候由C ++预处理器和C预处理器发出不同的源文件。
C ++ 03预处理器(至less应该是)类似于C99之前的C预处理器。 虽然措辞和段落号码略有不同,但我知道两者之间唯一的技术差异是C ++预处理器处理二维graphics和通用字符名称,这些名称在C中不存在。
从C99开始,C预处理器添加了当前版本的C ++中不存在的一些新function(例如可变参数macros)。 我不记得是肯定的,但不相信添加有向图。
我相信C ++ 0x将把两者再次联系起来(至less这是意图)。 段落编号和措词再次不同,但我相信其意图是他们应该同样工作(除了保留上述差异外)。
它们应该是相同的:C ++ 98和C ++ 03应该匹配C90,并且C ++ 0x应该匹配C99。 不过,措辞中可能存在一些错误。
预处理器之间的预定义的macros是不同的,主要是因为明显的语言特性差异。 比如:
- C99 N1256草稿 6.10.8“预定义的macros名称”
- C ++ 11 N3337草稿 16.8“预定义的macros名称”
尤其是:
- C要求你不要定义
__cplusplus
,C ++用它来表示版本 - C使用
__STDC__
来表示版本,C ++表示是实现定义的,并使用__cplusplus
来代替 - C有
__STDC_IEC_559__
和__STDC_IEC_559_COMPLEX__
指示浮点特性,C ++不会,而且似乎用每种typesreplacestd::numeric_limits<float>::is_iec559
常量 - C没有以
__STDCPP
为前缀的macros:_STDCPP_STRICT_POINTER_SAFETY__
和__STDCPP_THREADS__
正如DevSolar所提到的那样,C11添加了更多不属于C ++ 11的定义。