C++预处理器是否与C预处理器相同?

Ren*_*ger 24 c c++ standards c-preprocessor

我想知道C++和C的预处理器有多么不同.

问题的原因是关于预处理器特定问题的这个问题,其中解决问题的标准段落具有不同的措辞(和不同的段落编号),并且也是关于C++中的truefalse关键字的差异.

那么,是否存在更多差异,或者这是唯一的区别.

问题的扩展是何时由C++预处理器和C预处理器以不同方式发出的源文件.

Jer*_*fin 17

C++ 03预处理器(至少打算)类似于C99之前的C预处理器.虽然措辞和段落编号略有不同,但我知道两者之间唯一的技术差异是C++预处理器处理有向图和通用字符名称,这些名称在C中不存在.

从C99开始,C预处理器添加了一些在当前版本的C++中不存在的新功能(例如,可变参数宏).我不记得肯定,但不相信添加了有向图.

我相信C++ 0x会再次排队(至少那是意图).同样,段落编号和措辞也不尽相同,但我认为其意图是它们应该相同(除了保留上面提到的差异).


Jer*_*ock 6

它们应该是相同的:C++98 和 C++03 应与 C90 匹配,而 C++0x 应与 C99 匹配。不过,措辞可能存在错误。


Cir*_*四事件 6

预处理器之间的预定义宏有所不同,主要是因为明显的语言特征差异。例如比较:

尤其:

  • C要求你不要定义__cplusplus,C++用它来表示版本
  • C 用来__STDC__表示版本,C++ 表示是实现定义的,并__cplusplus使用
  • C 具有__STDC_IEC_559____STDC_IEC_559_COMPLEX__来指示浮点特性,C++ 没有并且似乎用每个类型std::numeric_limits<float>::is_iec559常量替换它
  • C 没有以__STDCPP:_STDCPP_STRICT_POINTER_SAFETY__和为前缀的宏__STDCPP_THREADS__

正如 DevSolar 提到的,C11 添加了更多不属于 C++11 的定义。