簡體   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