`

C++新手必问之头文件

阅读更多

C++新手必问之头文件

[结果]

经常在CSDN以及其他之类的技术论坛上问关于C++ 头文件的问题。提出这些问题的往往就是那些刚学C++的新手。当初我是菜鸟的时候也问过类似的问题。

现在来看看下面两个include:

#include<iostream>// 这个就是1998年标准化以后的标准头文件

#include<iostream.h>// 这个就是标准化以前的头文件

更本质上的区别就是iostream把标准C++库的组件放在一个名位stdnamespace里面。而相对的iostream.h则将这些标准组件放在全局空间里,同时在标准化以后旧有的C标准库也已经经过改造了。

看看下面这两个头文件

// 标准化后经过改造的C的标准库,所有的组件都放在了std

#include<cstdio>

// 标准化以前C++中的C标准库

#include<stdio.h>

// 在看看这个头文件C标准库下 基于char* 的字符处理函数库

#include<string.h>

// 在标准化以后他变成了这样

#include<cstring>

// 但是很多朋友还看见过这个字符串处理函数库,他包含了新的string class

#include<string>

经过了标准委员会如此大规模手术后,在98年以前出品的C++编译器(BC3.0BC5.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++标准程序库》。

[参考文献]

Stanley B.Lippman 潘爱民等译,C++ Primer3rd Edition,中国电力出版社,2002年。

分享到:
评论

相关推荐

    C和C++头文件对比一览

    经常在CSDN以及其他之类的技术论坛上问关于C++ 头文件的问题。提出这些问题的往往就是那些刚学C++的新手。当初我是菜鸟的时候也问过类似的问题。 现在来看看下面两个include: #include&lt;iostream&gt; // 这个...

    c++基本常用头文件

    对于刚入门的新手来说,这12个头文件是很重要的,在以后写代码时会经常用到,后面还有标准c++头文件,希望可以采纳!

    C与C++头文件一览.doc

    C/C++头文件汇总,跟据年代分类,并简要介绍C/C++头文件的发展,以及不同年代头文件的现状与区别,适合新手使用

    万能c++程序-新手必看

    新手必须掌握的c++各种结构汇总.看了这些必会有所斩获。

    初学C++的一些东西,适合新手,打包下载

    初学C++的一些东西,适合新手,打包下载 C++ 头文件 学习指导 库函数

    新手必看编程法则C++

    1.2 头文件的结构 1.3 定义文件的结构 1.4 头文件的作用 1.5 目录结构 第2章程序的版式 2.1 空行 2.2 代码行 2.3 代码行内的空格 2.4 对齐 2.5 长行拆分 2.6 修饰符的位置 2.7 注释 2.8 类的版式 第3章命名规则 3.1 ...

    新手学习C++入门资料

    标准C++中的字符串类取代了C标准C函数库头文件中的字符数组处理函数。 C++中用来做控制态输入输出的iostream类库替代了标准C中的stdio函数库。 C++中的try/catch/throw异常处理机制取代了标准C中的setjmp()和...

    c语言图形库头文件解决方法

    适合C语言新手使用图形库进行编程

    C++ .h和.cpp文件总结

    总结了.h文件能做什么,.cpp文件能做什么,总结了.h文件的本质,方便新手在遇到文件包含、类型声明、变量定义时能理清.h与.cpp关系,纯属个人总结文档。

    MFC中重要的头文件AFXWIN.H-C/C++代码类资源

    对新手来说,做MFC相关的编程时有时候会不小心动了头文件的内容,难以修正,其中就有afxwin.h 对新手来说,做MFC相关的编程时有时候会不小心动了头文件的内容,难以修正,其中就有afxwin.h

    C++函数简介.doc

    C++内部函数,内容比较全面详细,按头文件分类整理,排版清楚,易于查找,适合新手使用

    VC开发程序经验, 详细介绍了在实际开发中的经验

    原因不清楚,一般工程不会出现此问题,这次出现此问题主要是我用了于士其写的关于免装dxshow所写的类CameraDS所导致(解决此问题是一个非常痛苦的过程),解决方法是 工程-&gt;设置-&gt;所有配置-&gt;c/c++-&gt;预编译头文件-&gt;...

    TSC打印机开发所需.zip

    从新手小白的角度讲解,如何部署dll,lib文件,如何调用第三方库文件。包含资料有,tsclib.dll,tsclib.lib,tscdll.h文件齐全,不需要手动去写函数头文件,直接复制即可,实现方法参考我的博客文章。

    Visual C++ 2005入门经典--源代码及课后练习答案

     本书系编程语言先驱者Ivor Horton的经典之作,是学习C++编程最畅销的图书品种之一,不仅涵盖了Visual C++ .NET编程知识,还全面介绍了标准C++语言和.NET C++/CLI。本书延续了Ivor Horton讲解编程语言的独特方法,...

    高质量C++编程指南.zip

    (5) 真正的程序员不看参考手册,新手和胆小鬼才会看。 (6) 真正的程序员不写文档也不需要文档,只有看不懂程序的笨蛋才用文档。 (7) 真正的程序员认为自己比用户更明白用户需要什么。 (8) 真正的程序员不接受团队...

    leetcode中文版-OpenPrograming:C/C++、C#、Python

    leetcode中文版开放式...非常快,只有头文件,C++ 日志库。 人工智能 最佳相互碰撞避免 (C#) 混合互易速度障碍(C++) 导航 工具 Android性能测试工具-CPU、内存、网络流量、启动时间、电池状态 深度学习 神经风格算法

    Qt训练集-入门到高级.zip

    适用于Qt新手练习上手,该训练集基于Qt4.0,所包含的头文件在Qt5.0可能会报错,需要将其更换为Qt5.0的头文件

    超级玛丽经典代码(控制台)

    很不错的。里面各种类文件头文件都分的很清楚。。方便新手研究

Global site tag (gtag.js) - Google Analytics