0、序言

其实2者主要的区别就是iostream是C++标准的输入输出流头文件,而iostream.h是非标准的头文件。

标准头文件iostream中的函数属于标准命令空间,而iostream.h中的函数都是全局函数。

  1. #include <iostream> //这个就是C++98标准化以后的标准头文件
  2. #include <iostream.h> //这个就是标准化以前的头文件(当时还没有命令空间的概念

1、两者使用时的区别

以函数cout和endl举例说明。

1.1 iostream.h 的使用

由于iostream.h中函数都是全局的,使用的方法同C相同。

  1. //example.cpp
    #include <iostream.h>
  2.  
  3. int main(void)
  4. {
  5.   cout<<"Hello World"<<endl;
  6.   return ;
  7. }

1.1.1 iostream.h 的编译

在Windows平台下的VC++/VS中编译没什么好说的,直接可以编译通过.

在Linux下编译需要详细的说明一下。

上面的例子examplec.pp使用下面普通的方法编译,甚至提示找不到iostream.h这个头文件

  1. # g++ example.cpp
  2. error: iostream.h: No such file or directory
  3. error: cout was not declared in this scope
  4. error: endl was not declared in this scope

没有头文件怎么办呢?这需要安装兼容包,在我的64位系统安装了下面2个包(还有其他包)

  1. # yum install compat-gcc*
  2.  
  3. Install compat-gcc-.x86_64
  4. Install compat-gcc--c++.x86_64

记住上面包的名字中的数字34,在不同系统中可能是不同的,继续编译,注意这次使用的不是g++而是g++34.

  1. # g++34example.cpp
  1. 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

  1. # g++34 -g example.cpp -Wno-deprecated

OK,到此就编译成功了。

1.2 iostream 的使用

主要有3种方法,没有最优,只有最合适

方法1,适用于使用函数个数少,函数使用次数少 的情况

  1. //example1.cpp
  2. #include <iostream>
  3.  
  4. int main(void)
  5. {
  6.   std::cout<<"Hello World"<<std::endl; //方法1
  7.   return ;
  8. }

方法2,适用于使用函数个数少,函数使用次数较多 的情况

  1. //example2.cpp
  2. #include <iostream>
  3. using std::cout;              //方法2
  4. using std::endl;              //方法2
  5.  
  6. int main(void)
  7. {
  8.   cout<<"Hello World"<<endl;
  9.   return ;
  10. }

方法3,适用于使用函数个数和函数次数较多 的情况

  1. //example3.cpp
  2. #include <iostream>
  3. using namespace std;            //方法3
  4.  
  5. int main(void)
  6. {
  7.   cout<<"Hello World"<<endl;
  8.   return ;
  9. }

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

<iostream> 和 <iostream.h>的区别 及 Linux下编译iostream.h的方法的更多相关文章

  1. Linux下编译,要下载tar.xz,而不要下载zip,因为换行的编码不一样,对.h.cpp没有影响,但是对脚本有影响 good

    原因是 在win下编辑的时候,换行结尾是\n\r , 而在linux下 是\n,所以才会有 多出来的\r但是这个我是直接下载的官网文件解压的,没有动过啊. 破案了. linux下编译要下 .tar.x ...

  2. Linux 下没有conio.h 已解决

    原文:http://blog.sina.com.cn/s/blog_6a95e00b0100zqvf.html #include <stdio.h>//#include <conio ...

  3. linux下编译安装boost库

    linux下编译安装boost库 linux下编译安装boost库 1.下载并解压boost 1.58 源代码 下载 解压 2.运行bootstrap.sh 3.使用b2进行构建 构建成功的提示 4. ...

  4. linux下编译原理分析

    linux下编译hello.c 程序,使用gcc hello.c,然后./a.out就能够执行:在这个简单的命令后面隐藏了很多复杂的过程,这个过程包含了以下的步骤: ================= ...

  5. Linux下编译使用boost库:

    Boost是什么不多说, 下面说说怎样在Linux下编译使用Boost的所有模块. 1. 先去Boost官网下载最新的Boost版本, 我下载的是boost_1_56_0版本, 解压. 2. 进入解压 ...

  6. 【原创】Linux下编译链接中常见问题总结

    前言 一直以来对Linux下编译链接产生的问题没有好好重视起来,出现问题就度娘一下,很多时候的确是在搜索帮助下解决了BUG,但由于对原因不求甚解,没有细细研究,结果总是在遇到在BUG时弄得手忙脚乱得. ...

  7. linux下编译eXosip、osip,以及UAC和UAS的例子

    从网站上看到了这样的一篇博文 :Windows下编译eXosip.osip,以及UAC和UAS的例子 (链接:http://www.cnblogs.com/dyllove98/archive/2013 ...

  8. [转载]Linux下终端字体颜色设置方法

    原文地址:Linux下终端字体颜色设置方法作者:router 网上类似的文章有很多,但是都是转来转去的,没有经过测试,按照很多文章的方法会造成你设置之后的终端在换行和删除输入字符时终端显示会乱七八糟, ...

  9. LINUX下编译安装PHP各种报错大集合

    本文为大家整理汇总了一些linux下编译安装php各种报错大集合 ,感兴趣的同学参考下. nginx1.6.2-mysql5.5.32二进制,php安装报错解决: 123456 [root@clien ...

随机推荐

  1. [转]ubuntu server上网配置

    [转]ubuntu server上网配置 http://blog.sina.com.cn/s/blog_6c9d65a101011pyt.html 今天我的ubuntu server上不去网了,所以重 ...

  2. 解决ubuntu字体发虚,网页字体发虚

    好吧,哥也不知所以然,只是突然间所有东西的字体都发虚了~~后来发现是应该是语言支持搞的鬼,卸载掉下面的东东就没事了 sudo apt-get remove fonts-arphic-ukai ttf- ...

  3. 【BZOJ 2120】 数颜色

    Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜 ...

  4. C#中如何利用操作符重载和转换操作符

    操作符重载 有的编程语言允许一个类型定义操作符应该如何操作类型的实例,比如string类型和int类型都重载了(==)和(+)等操作符,当编译器发现两个int类型的实例使用+操作符的时候,编译器会生成 ...

  5. Nginx问题总汇

    http://blog.csdn.net/llnara/article/details/8691049 关键字: open var run nginx pid failed 产生原因:添加模块,重编译 ...

  6. 推荐系统之LFM

    这里我想给大家介绍另外一种推荐系统,这种算法叫做潜在因子(Latent Factor)算法.这种算法是在NetFlix(没错,就是用大数据捧火<纸牌屋>的那家公司)的推荐算法竞赛中获奖的算 ...

  7. Java/Java Web中乱码解决汇总

    在开发Java/Java Web Application过程中,往往会出现乱码问题,而且有的时候真会弄得人很烦,浪费太多的时间. 记得之前看过一篇帖子,详细解释了Encoding/Decoding过程 ...

  8. git学习——<一>git安装

    一.windows.linux平台安装 windows平台安装简单方便,到git官网上下载exe安装包即可,会把git bash shell给你安装好,你到命令窗口便可直接使用. linux平台安装, ...

  9. matrix_last_acm_1

    password 123 A http://acm.hust.edu.cn/vjudge/contest/view.action?cid=96950#problem/A 题意:n个数初始ai,m次操作 ...

  10. Java NIO 与 基于reactor设计模式的事件处理模型

    Java NIO非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,过去,在打开一个I/O通道后,read()将一直等待在端口一边读取字节内 ...