c++包含头文件基础--(头文件和库文…

        vc中在用include命令时经常搞不清楚有的头文件不加".h",而加了也一样可以用,好象没有区别似的,如iostream.其实这是标准不一样.iostream.h是 98 年 C++ 标准出来之前的库,现在都是为与遗留代码保持兼容而提供的(在vc2003和vc2005中已没有iostream.h)。引入c++标准之后,标准 C++ 的库都处于 ::std 名字空间之内,而老的库是直接把东西放在全局名字空间 :: 内的。还有,iostream.h 的流库以前不是模板,而标准库中的都是模板.

vc中string和string.h是不一样的,string是c++提供的string类的头文件,而string.h则包含了C语言中的字符串操作函数的文件,如strcpy,memset等.
---------------------------------------------------
其实没有 < iostream.h > 这样的东西 --- 标准化委员会在简化非C标准头文件时用 < iostream > 取代了它。但又没有完全取消 < iostream.h > 的使用,并且很多编译器都同时支持 < iostream > 和 < iostream.h > ,造成现在的局面,老大(标准化委员会)确实有不得已的苦衷。


话说当年,在标准化委员会动手重建新的标准库的时候,遇到了问题。为了避免类名和函数名的冲突问题,引入了名字空间std。但无数现有的C++代码都依赖于使用了多年的伪标准库中的功能,例如,声明在 < iostream.h > 和 < complex.h > 等头文件中的功能。现有软件没有针对使用名字空间而进行相应的设计或者升级,如果用std来包装标准库导致现有代码不能使用,那手底下的小弟(程序员)是不会同意的。标准化委员会为了拉拢人心,吸引更多的人入会,决定为包装了std的那部分标准库构建新的头文件名。将现有C++头文件名中的.h去掉,所以就出现了 < iostream.h> 和 < iostream > 等很多双胞胎。对于C头文件,采用同样方法但在每个名字前还要添加一个C,所以C的 <string.h> 变成了 <cstring>。旧的C++头文件是官方明确反对使用的,但旧的C头文件则没有(以保持对C的兼容性)。其实编译器制造商不会停止对客户现有软件提供支持,所以在可以预计的将来,旧的C++头文件还会嚣张一段时间。如果能明白字符串头文件的使用,举一反三,其他的也差不多会用了。


<string.h> 是旧的C头文件,对应的是基于char*的字符串处理函数;
<string> 是包装了std的C++头文件,对应的是新的strng类;
<cstring> 是对应旧的C头文件的std版本。
跑远了,言归正传。如果你的编译器都同时支持 < iostream > 和 < iostream.h >,那使用 #include < iostream >,得到的是置于名字空间std下的iostream库的元素;如果使用 #include < iostream.h >,得到的是置于全局空间的同样的元素。在全局空间获取元素会导致名字冲突,而设计名字空间的初衷正是用来避免这种名字冲突的发生。还有,打字时 < iostream > 比 < iostream.h > 少两个字,所以我会使用< iostream > ^-^

另外,如果用using namespace std;则必须位于#include之后,不然会出错。

例:标准格式

#include <iostream>
#include <iomanip>
#include <string>
#include <conio.h>

using namespace std;

----------------------

include中尖括号和引号区别:

使用尖括号的话,编译时会先在系统include目录里搜索,如果找不到才会在源代码所在目录搜索;使用双引号则相反,会先在源代码目录里搜索。这就意味着,当系统里(如/user/include/里)有一个叫做math.h的头文件,而你的源代码目录里也有一个你自己写的math.h头文件,那么使用尖括号时用的就是系统里的;而使用双引号的话则会使用你自己写的那个。

所以建议: 使用系统里提供的头文件时使用尖括号
使用自己编写的头文件时使用双引号

///

头文件包含声明, 库文件包含实现或者与DLL库的连接

所以,如果在代码里要用到这些函数那么就要包含头文件,编译的时候才能知道这些函数的原形;

在进行代码连接的时候就需要库文件了,这时连接器就把函数的实现代码(静态库)连接到你的程序或者将你的函数调用连接到相应的DLL的对应函数(动态库)

lib是静态库, 编译的时候代码直接插入到你的程序 ,DLL是动态库,编译的时候,只是产生一些调用DLL内代码的导入表,真正运行的时候是调用的DLL内的代码

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值