C++Primer--->#include與#include以及#inclue 和 #include的區別

轉載於:http://www.cnblogs.com/charley_yang/archive/2010/12/08/1900715.html

1.從功能性的角度來講<iostream>包含了一系列模板化的I/O類,相反地<iostream.h>只僅僅是支持字符流。另外,輸入輸出流的C++標準規範接口在一些微妙的細節上都已改進,因此,<iostream>和<iostream.h>在接口和執行上都是不同的。最後,<iostream>的各組成都是以STL(Standard Template Library,標準模板庫)的形式聲明的,然而<iostream.h>的各組成都是聲明成全局型的。 
     因爲這些實質上的不同,你不能在一個程序中混淆使用這兩個庫。做爲一種習慣,在新的代碼中一般使用<iostream>,但如果你處理的是過去編寫的代碼,爲了繼承可以用繼續用<iostream.h>就保持代碼的一致性。

/////////////////////////////
<iostream>表示你使用的是標註命名空間,也就是在程序開始應該有這麼一句話
using namespace std ; 這是遵循c++標準的
<iostream.h> 則沒有遵循c++標準
/////////////////////////////
<string.h>是舊的C頭文件,對應的是基於char*的字符串處理函數;
<string>是包裝了std的C++頭文件,對應的是新的strng類;
<cstring>是對應舊的C頭文件的std版本。

(標準化委員會爲了拉攏人心,吸引更多的人入會,決定爲包裝了std的那部分標準庫構建新的頭文件名。將現有C++頭文件名中的.h去掉,所以就出現了< iostream.h> 和< iostream > 等很多雙胞胎。對於C頭文件,採用同樣方法但在每個名字前還要添加一個C,所以C的<string.h> 變成了<cstring>。)

#include <iostream.h> 和 #include <iostream>  
前一個不是c++標準中的,後一個在c++標準中

還有就是平時我們所用的兩種情況,當有輸出和輸入流時就要注意了。

換成#include <iostream>,要加一句using namespace std;或把cout改成std::cout,end改成std::endl等等

#include <iostream.h>
c++標準化之前的使用方式.
#include <iostream>
using namespace std;
這個必須同時出現.c++標準化後推薦使用的方式.主要是因爲namespace的引入.

#include <..> 是從標準庫裏直接提取頭文件
#include ".. "是先從源文件當前目錄提取頭文件,再從標準庫裏提取。

一般自己寫的文件用 " "

2.爲什麼下面這段代碼
#include <string.h>
void main()
{
     string aaa= "abcsd d";
     printf("looking for abc from abcdecd %s\n",
         (strcmp(aaa,"abc")) ? "Found" : "Not Found");
}
不能正確執行,說是string類型沒有定義
而下面:
#include <string>
using namespace std;
void main()
{
     string aaa= "abcsd d";
     printf("looking for abc from abcdecd %s\n",
         (strcmp(aaa,"abc")) ? "Found" : "Not Found");
}
這裏的string編譯器就認識了,但是strcmp就不認識了呢?
---------------------------------------------------------------
一般一個C++的老的帶“.h”擴展名的庫文件,比如iostream.h,在新標準後的標準庫中都有一個不帶“.h”擴展名的相對應,區別除了後者的好多改進之外,還有一點就是後者的東東都塞進了“std”名字空間中。
但唯獨string特別。
問題在於C++要兼容C的標準庫,而C的標準庫裏碰巧也已經有一個名字叫做“string.h”的頭文件,包含一些常用的C字符串處理函數,比如樓主提到的strcmp。
這個頭文件跟C++的string類半點關係也沒有,所以<string>並非<string.h>的“升級版本”,他們是毫無關係的兩個頭文件。
要達到樓主的目的,比如同時:
#include <string.h>
#include <string>
using namespace std;
或者
#include <cstring>
#include <string>
其中<cstring>是與C標準庫的<string.h>相對應,但裹有std名字空間的版本。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章