c c 標頭檔案

2021-05-23 17:19:02 字數 1969 閱讀 5835

#include < string .h >

void main()

不能正確執行,提示說是string型別沒有定義

而下面:

#include < string >

using namespace std;

void main()

這裡的string編譯器就認識了,但是strcmp就不認識了呢?

一般乙個c++的老的帶「。h」副檔名的庫檔案,比如iostream.h,在新標準後的標準庫中都有乙個不帶「。h」副檔名的相對應,區別除了後者的好多改進之外,還有一點就是後者的東東都塞進了「std」名字空間中。

但唯獨string特別。

問題在於c++要相容c的標準庫,而c的標準庫里碰巧也已經有乙個名字叫做「string.h」的標頭檔案,包含一些常用的c字串處理函式,比如樓主提到的strcmp.

這個標頭檔案跟c++的string類半點關係也沒有,所以並非的「公升級版本」,他們是毫無關係的兩個標頭檔案。

要達到樓主的目的,比如同時:

#include < string .h >

#include < string >

using namespace std;

或者#include < cstring >

#include < string >

其中是與c標準庫的相對應,但裹有std名字空間的版本。

笑談(來自高質量++)

c++標準庫很大。非常大。難以置信的大。怎麼個**?這麼說吧:在c++標準中,關於標準庫的規格說明佔了密密麻麻300 多頁,這還不包括標準c 庫,後者只是"作為參考"(老實說,原文就是用的這個詞)包含在c++庫中。當然,並非總是越大越好,但在現在的情況下,確實越大越好,因為大的庫會包含大量的功能。標準庫中的功能越多,開發自己的應用程式時能借助的功能就越多。c++庫並非提供了一切(很明顯的是,沒有提供併發和圖形使用者介面的支援),但確實提供了很多。幾乎任何事你都可以求助於它。在歸納標準庫中有些什麼之前,需要介紹一下它是如何組織的。因為標準庫中東西如此之多,你(或象你一樣的其他什麼人)所選擇的類名或函式名就很有可能和標準庫中的某個名字相同。為了避免這種情況所造成的名字衝突,實際上標準庫中的一切都被放在名字空間std 中(參見條款28)。但這帶來了乙個新問題。無數現有的c++**都依賴於使用了多年的偽標準庫中的功能,例如,宣告在,,等標頭檔案中的功能。現有軟體沒有針對使用名字空間而進行設計,如果用std 來包裝標準庫導致現有**不能用,將是一種可恥行為。(這種釜底抽薪的做法會讓現有**的程式設計師說出比"可恥" 更難聽的話)懾於被激怒的程式設計師會產生的破壞力,標準委員會決定為包裝了std 的那部分標準庫構件建立新的頭檔名。生成新標頭檔案的方法僅僅是將現有c++頭檔名中的。h 去掉,方法本身不重要,正如最後產生的結果不一致也並不重要一樣。所以變成了,變成了,等等。對於c 標頭檔案,採用同樣的方法,但在每個名字前還要新增乙個c.所以c 的變成了,變成了,等等。最後一點是,舊的c++標頭檔案是官方所反對使用的(即,明確列出不再支援),但舊的c 標頭檔案則沒有(以保持對c 的相容性)。實際上,編譯器製造商不會停止對客戶現有軟體提供支援,所以可以預計,舊的c++標頭檔案在未來幾年內還是會被支援。

所以,實際來說,下面是c++標頭檔案的現狀:

舊的c++頭檔名如將會繼續被支援,儘管它們不在官方標準中。這些標頭檔案的內容不在名字空間std 中。

新的c++標頭檔案如包含的基本功能和對應的舊標頭檔案相同,但標頭檔案的內容在名字空間std 中。(在標準化的過程中,庫中有些部分的細節被修改了,所以舊標頭檔案和新標頭檔案中的實體不一定完全對應。)

標準c 標頭檔案如繼續被支援。標頭檔案的內容不在std 中。

具有c 庫功能的新c++標頭檔案具有如這樣的名字。它們提供的內容和相應的舊c 標頭檔案相同,只是內容在std 中。

所有這些初看有點怪,但不難習慣它。最大的挑戰是把字串標頭檔案理清楚:

是舊的c 標頭檔案,對應的是基於char*的字串處理函式;

是對應於舊c 標頭檔案的std 版本;

是包裝了std 的c++標頭檔案,對應的是新的string 類。

如果能掌握這些(我相信你能),其餘的也就容易了。

Linux標頭檔案 C C 標頭檔案

linux標頭檔案 c c 標頭檔案。linux常用標頭檔案如下 posix標準定義的標頭檔案 目錄項 檔案控制 檔名匹配型別 路徑名模式匹配型別 組檔案 網路資料庫操作 口令檔案 正規表示式 tar歸檔值 終端i o 符號常量 檔案時間 字元擴充套件型別 internet定義 套接字本地介面 in...

c,c 標頭檔案

c 傳統 c include 設定插入點 include 字元處理 include 定義錯誤碼 include 浮點數處理 include 檔案輸入 輸出 include 引數化輸入 輸出 include 資料流輸入 輸出 include 定義各種資料型別最值常量 include 定義本地化函式 i...

C C 標頭檔案

其中包含的引用標頭檔案如下 include 設定插入點 include 字元處理 include 定義錯誤碼 include 浮點數處理 include 檔案輸入 輸出 include 引數化輸入 輸出 include 資料流輸入 輸出 include 定義各種資料型別最值常量 include 定義...