程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> iostream.h和iostream 區別

iostream.h和iostream 區別

編輯:關於C語言

C++中新定義的方法都是有名字空間的 比如cout就屬於std名字空間 如果include頭文件的時候加上.h,默認會using namespace 否則需要自己加上 using namespace XXX 對於C中已經定義的方法如printf,沒有影響的

iostream.h是包含輸入/輸出流處理的頭文件,iostream就什麼都不是了
但用iostream要加名詞空間namespace

#include<iostream.h>
或者是
#include<iostream>
using namespace std;
二者都行

#include<iostream.h>是C語言中比較通用的
#include<iostream>
using namespace std;
是C++中比較通用的

#include <iostream.h>這樣寫,裡面的函數都是全局函數.

不加.h的是現在C++中規定的標准,目的在於使C++代碼用於移植和混合嵌入時不受擴展名.h的限制,避免因為.h而造成的額外的處理和修改
而加.h的是c語言的用法,但是在c++中也支持這種用法,主要是為了向下兼容c 的內容,我們平時盡量不用這種方法
iostream是現在C++中規定的標准,目的在於使C++代碼用於移植和混合嵌入時不受擴展名.h的限制,避免因為.h而造成的額外的處理和修改。iostream包含的基本功能和對應的舊頭文件相同,但頭文件的內容在名字空間std中。(在標准化的過程中,庫中有些部分的細節被修改了,所以舊頭文件和新頭文件中的實體不一定完全對應。) 一般情況下應該用這個頭文件,而iostream.h則是老式的,以後有可能被淘汰。
    
      經常在CSDN以及其他之類的技術論壇上問關於C++ 頭文件的問題。提出這些問題的往往就是那些剛學C++的新手。當初我是菜鳥的時候也問過類似的問題。
 
     現在來看看下面兩個include:
 
     #include<iostream>      // 這個就是1998年標准化以後的標准頭文件
 
     #include<iostream.h>        // 這個就是標准化以前的頭文件
 
 
 
     更本質上的區別就是iostream把標准C++庫的組件放在一個名位std的namespace裡面。而相對的iostream.h則將這些標准組件放在全局空間裡,同時在標准化以後舊有的C標准庫也已經經過改造了。 使用前者,就需要在代碼中添加語句:using namespace std;
 
     看看下面這兩個頭文件
 
     // 標准化後經過改造的C的標准庫,所有的組件都放在了std中
 
     #include<cstdio>          
 
     // 標准化以前C++中的C標准庫
 
     #include<stdio.h>
 
     // 在看看這個頭文件C標准庫下 基於char* 的字符處理函數庫
 
     #include<string.h>
 
     // 在標准化以後他變成了這樣
 
     #include<cstring>
 
     // 但是很多朋友還看見過這個字符串處理函數庫,他包含了新的string class
 
     #include<string>
 
 
 
     經過了標准委員會如此大規模手術後,在98年以前出品的C++編譯器(BC3.0,BC5.0)上能順利通過編譯的源文件,在支持新標准的編譯器上可能無法順利通過編譯也就是很正常的事了。
 
 
 
[起因]
 
     在回過頭來看看標准程序庫,這個程序庫涵蓋范圍相當廣大,提過了許許多多好用的功能。正是因為這樣標准程序庫中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的外衣。
 
 
 
其實標准化以後的標准程序庫的改動並不只有這些而已,很多的標准化組件都被“tamplate化”。其中就有元老級人物iostream。標准程序庫的問題並不是用一篇,兩篇文章就可以說清楚的。如果你像進一步的了解C++的標准程序庫的話,你可以看看侯先生的《C++標准程序庫》。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved