【发布时间】:2011-02-27 15:36:08
【问题描述】:
符合 C++98/03/0x 实现的所有函数都完全符合 C99 吗?
我认为 C++0x 添加了一些 C99(语言)特性,但从未听过或读过任何关于 C 库函数的明确内容。
为了避免混淆,我说的是一个使用在 <c*> 标头集中声明的函数的 C++ 程序。
谢谢。
【问题讨论】:
标签: c++ c c99 standard-library
符合 C++98/03/0x 实现的所有函数都完全符合 C99 吗?
我认为 C++0x 添加了一些 C99(语言)特性,但从未听过或读过任何关于 C 库函数的明确内容。
为了避免混淆,我说的是一个使用在 <c*> 标头集中声明的函数的 C++ 程序。
谢谢。
【问题讨论】:
标签: c++ c c99 standard-library
大部分 C99 标准库已导入 C++0X,但不是全部。从记忆中,在没有导入的东西中有
<ctgmath> 只包含<ccomplex> 和<cmath>,<ccomplex> 表现得好像它包含 <complex>
<cmath> 有不少调整(提供重载和模板函数完成 C99 提供的一个)<cstdbool>、<iso646.h>、...)进行了调整以考虑语言之间的差异(bool 在 C++ 中是原始的,例如在 C 中由 <stdbool.h> 提供的宏),但没有数学部分的范围。标头<xxx.h> 其<cxx> 形式的行为不像C99 版本只是在全局命名空间中声明<cxxx> 的内容,它们并不接近C99 <xxx.h> 内容。
相关的事情:C++0X 提供了一些 cxxx 和 xxx.h 形式的头文件,这些头文件在 C99 中没有定义(<cstdalign> 和 <cuchar>,第二个是在 C TR 中定义的)
(我记得有一堆 C99 的数学函数放在 TR1 中,但没有保存在 C++0X 中,我错了,那一堆数学函数一开始就不是 C99 的一部分)。
【讨论】:
没有。 C++03 与 ANSI C89/ISO C90 对齐,而不是 C99。
即将推出的 C++0x 标准预计将在某种程度上与 C99 保持一致。请参阅current draft 中的第 17.6.1.2 段,其中列出了ccomplex、cinttypes、cstdint 等。请注意,正如 AProgrammer 所提到的,某些标头并不完全相同;此外,标头 cuchar 与 C Technical Report 19769 对齐,而不是 C99。
【讨论】:
cuchar等?没错,但我从来没有说过标题内容完全相同(并且给了你一个 +1 来指定一些差异)。将在我的答案中添加更多细节,而不会复制您的答案。