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的定义。