C与C ++标准库的关系

时间:2014-10-10 17:03:24

标签: c++ c language-lawyer

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

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

因此C library中定义的C11的所有内容都适用于C++ C++11中定义的C library实现,或者我们无法依赖C标准提供了哪些内容?

1 个答案:

答案 0 :(得分:9)

对于 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章和第7章中描述的库   ISO / IEC 9899:1999 / Cor.1:2001和ISO / IEC第7条   9899:1999 / Cor.2:2003在下文中称为C标准库。 1

C ++标准使用术语 C标准库来引用C99和TC,并明确说明C ++与C的区别。

和部分17.2 C标准库说:

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

cname 标题文件对应于C标准库 name.h 文件,它们包含在17.6.1.2 标题中其他事情:

  

除第18条至第30条及附件D所述外,其内容为   每个标题cname应与相应的标题相同   标题name.h,如C标准库(1.2)或C中所指定   Unicode TR,视情况而定,就像包含一样。在C ++标准中   但是,库是声明(除了定义的名称之外)   因为C)中的宏在命名空间的命名空间范围(3.3.6)内   性病。这些名称是否首先在其中声明是未指定的   然后将全局命名空间作用域注入到命名空间std中   显式使用声明(7.3.3)

climits相关的limits.h内容在18.3.3部分中介绍并说:

  

内容与标准C库标题相同。   [注意:由宏定义的常量类型是   不需要匹配宏引用的类型.-结束注释]

注意,正如我在上面的注释中提到的那样,规范性引用不作为一个整体,C ++标准必须明确引用它的规范性引用才能应用于C ++标准。有关详细信息,请参阅 Can we apply content not explicitly cited from the normative references to the C++ standard?