繁体   English   中英

C与C ++标准库的关系

[英]Relationship between C and C++ standard library

这个问题与编程或特定的语言概念没有直接关系。 我的问题是我们是否可以使用对C国际标准(例如C11 )的引用来提供规范性参考来描述C++ C库中的任何概念。

更具体地说,在N3797::18.3.3 [c.limits]定义的标题<climits>中描述了C library标题。 但是C标准提供了有关<limits.h>内容的更全面的信息,而不是N3797工作草案。

所以对一切C library中定义的C11是真正的C++中定义的实现C++11C library或者我们不能依赖于什么C标准规定?

对于C标准库, C ++回退到C标准,对于C ++ 11,它回退到C99而不是C11,在C ++ 11之前引用的C标准是C90。 1.2 规范性参考文献中对此进行了说明:

以下参考文件对于本文件的应用是必不可少的。 凡是注日期的引用文件,仅引用的版本适用。 凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本标准。

包括:

  • ISO / IEC 9899:1999,编程语言 - C.

  • ISO / IEC 9899:1999 / Cor.1:2001(E),编程语言 - C,技术勘误1

  • ISO / IEC 9899:1999 / Cor.2:2004(E),编程语言 - C,技术勘误2

  • ISO / IEC 9899:1999 / Cor.3:2007(E),编程语言 - C,技术勘误3

并且还说:

ISO / IEC 9899:1999的第7条和ISO / IEC 9899:1999 / Cor.1:2001的第7条以及ISO / IEC 9899:1999 / Cor.2:2003的第7条中描述的库在下文中称为C标准库。 1

C ++标准使用术语C标准库来引用C99和TC,并将明确说明C ++与C的不同之处。

和第17.2C标准库说:

  1. C ++标准库还提供C标准库的功能,经过适当调整以确保静态类型安全。
  2. 许多库函数的描述依赖于C标准库来获取这些函数的签名和语义。 在所有这些情况下,应省略对限制限定符的任何使用。

与C标准库name.h文件相对应的cname头文件包含在17.6.1.2 Headers中 ,其中包括:

除第18条至第30条和附件D中所述外,每个标题cname的内容应与C标准库(1.2)或C Unicode TR中指定的相应标题name.h的内容相同。 ,好像通过包含。 但是,在C ++标准库中,声明(除了在C中定义为宏的名称除外)都在命名空间std的命名空间范围(3.3.6)内。 未指定是否首先在全局命名空间范围内声明这些名称,然后通过显式使用声明将其注入命名空间std(7.3.3)

limits.h相关的climits内容将在第18.3.3节中介绍,并说:

内容与标准C库头相同。 [注意:宏中定义的常量类型不需要与宏引用的类型相匹配。-end note]

请注意,正如我在上面的注释中所提到的,规范性引用并未作为一个整体,C ++标准必须明确引用它以适用于C ++标准的规范性引用。 请参阅我们是否可以将未明确引用的内容应用于C ++标准的规范性引用? 更多细节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM