【问题标题】:Is the C part of the C++ library automatically C99?C++ 库的 C 部分是否自动为 C99?
【发布时间】:2011-02-27 15:36:08
【问题描述】:

符合 C++98/03/0x 实现的所有函数都完全符合 C99 吗?

我认为 C++0x 添加了一些 C99(语言)特性,但从未听过或读过任何关于 C 库函数的明确内容。

为了避免混淆,我说的是一个使用在 <c*> 标头集中声明的函数的 C++ 程序。

谢谢。

【问题讨论】:

    标签: c++ c c99 standard-library


    【解决方案1】:

    大部分 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 的一部分)。

    【讨论】:

      【解决方案2】:

      没有。 C++03 与 ANSI C89/ISO C90 对齐,而不是 C99。

      即将推出的 C++0x 标准预计将在某种程度上与 C99 保持一致。请参阅current draft 中的第 17.6.1.2 段,其中列出了ccomplexcinttypescstdint 等。请注意,正如 AProgrammer 所提到的,某些标头并不完全相同;此外,标头 cucharC Technical Report 19769 对齐,而不是 C99。

      【讨论】:

      • 某些标头的内容不是 C99 内容。
      • @AProgrammer:你的意思是cuchar等?没错,但我从来没有说过标题内容完全相同(并且给了你一个 +1 来指定一些差异)。将在我的答案中添加更多细节,而不会复制您的答案。
      猜你喜欢
      • 1970-01-01
      • 2018-05-11
      • 2011-02-04
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多