和 的區別 及 Linux下編譯iostream.h的方法
# g++34example.cpp In file included from /usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../include/c++/3.4.6/backward/iostream.h:31, from main.cpp:8: /usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../include/c++/3.4.6/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
這次編譯有一個很長的warning,意思就是建議使用標準標頭檔案不使用非標準標頭檔案。
非要使用非標準標頭檔案的時候可以通過新增編譯選項-Wno-deprecated 來取消這個warning
# g++34 -g example.cpp -Wno-deprecated
OK,到此就編譯成功了。1.2 iostream 的使用
主要有3種方法,沒有最優,只有最合適
方法1,適用於使用函式個數少,函式使用次數少 的情況
//example1.cpp #include <iostream> int main(void) { std::cout<<"Hello World"<<std::endl; //方法1 return 0; }
方法2,適用於使用函式個數少,函式使用次數較多 的情況
//example2.cpp
#include <iostream>
using std::cout; //方法2
using std::endl; //方法2
int main(void)
{
cout<<"Hello World"<<endl;
return 0;
}
方法3,適用於使用函式個數和函式次數較多 的情況
//example3.cpp #include <iostream> using namespace std; //方法3 int main(void) { cout<<"Hello World"<<endl; return 0; }
2、建議
最好使用標準標頭檔案.
iostream是現在C++中規定的標準,目的在於使C++程式碼用於移植和混合嵌入時不受副檔名.h的限制,避免因為.h而造成的額外的處理和修改。
iostream包含的基本功能和對應的舊標頭檔案相同,但標頭檔案的內容在名字空間std中。
(在標準化的過程中,庫中有些部分的細節被修改了,所以舊標頭檔案和新標頭檔案中的實體不一定完全對應。)
一般情況下應該用這個標頭檔案,而iostream.h則是老式的,以後有可能被淘汰。
3、歷史
在回過頭來看看標準程式庫,這個程式庫涵蓋範圍相當廣大,提過了許許多多好用的功能。
正是因為這樣標準程式庫中class的名稱和函式名與第三方提供的程式庫中的class名或是函式名發生名字衝突的可能性大大增大。
為了避免這個問題的發生,標準委員會決定將標準程式庫中每一樣東西都放在namespace std中。
但是這麼做同時有引來了一個新的問題。很多C++程式程式碼依賴那些已經存在很多年的C++ “準”標準程式庫(C++遲遲未標準化才導致這些情況的發生),例如iosteam.h,complex.h等等。
為了解決這個新出現的問題,標準化委員會決定設計一些新的標頭檔案名,給那些穿上std外衣的元件所使用。
把C++標頭檔案的.h去掉,於是就有前面出現的iostream,同樣C的標頭檔案也做了相同的處理,同時在前面加上了一個字母c,以表示是C的標頭檔案(感覺上有中種族歧視的感覺)。
同時標準化委員會宣告就有的C++標頭檔案將不再列於被支援的名單之中了,而舊有的C標頭檔案為了滿足“對C的相容性”這個古老契約,仍然將繼續存活下去。
但是,那些編譯器廠商不可能去推翻他們客戶的舊有編譯器(也跟本不會去這麼做),所以那些舊有的C++標頭檔案仍然苟延殘喘的活了下來,並不斷的擾亂那些C++新兵的心智。
下面就是現在大多數C++開發工具表示標頭檔案的組織狀態:
1.舊的C++標頭檔案 比如iostream.h,他們雖然被標準化委員會所拋棄,但由於各大廠商為了各自的商業利益仍然將繼續存活下去,這些標頭檔案的內容將不處於namespace std中。
2.新的C++標頭檔案如iostream雖然提供了和舊有標頭檔案相同的功能,但他的內容都併入了namespace std中,從而有效避免了名字汙染的問題。
3.標準C的標頭檔案如stdio.h繼續獲得支援,這類檔案的內容並未放在std中。
4.C函式庫的技能也有對應的新式C++版本,起名稱類似cstdio,這類標頭檔案的內容也有幸穿上了std的外衣。
-------------------------------------------------------------------------------------------------------------------------------------------------------------
參考資料:
http://hi.baidu.com/laddie10/blog/item/079b1d4c32d7d8fcd62afc25.html
http://bbs.sjtu.edu.cn/bbstcon,board,C,reid,1101133248,file,M.1101178603.A.html
轉載自:http://www.cnblogs.com/LubinLew/p/cpp-iostream-and-iostream_h.html