1. 程式人生 > >和 的區別 及 Linux下編譯iostream.h的方法

和 的區別 及 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