关于.h头件的一些总结

总结一下,尚在戒烟还用买烟吗?
.h文件只为编译器所需要,因为它要确保在.cpp或.c文件(它要编译的文件,rc编译器也需要.h文件)中函数(应该说所有符号啦)被正确地使用,例如不能声明一个有返回值的函数而不返回,这当然会出现错误.再细想,头文件出现的原因:
需要使用的符号都要在被使用之前声明,如果没有头文件你就需要在同一个.cpp文件中写许多的东西,还要顾及先后次序(其实头文件在编译时会在包含它的文件中打开,亦即是说,头文件实际上是.cpp文件的一部分,这也是需要预编译头文件技术的原因,编译器是以文件为单位编译的),所以,头文件是追求简洁美观方便的结果(有什么不是由这个目的产生的呢?)
头文件要注意的一些问题:首先,注意头文件的重复包含会出现问题(容易发现),其次,不要再说一个.h文件对应一个.cpp文件这种傻话(我以前也是这么想的),你大可以在头文件中声明且只是声明(声明和定义是不同的概念)一个函数fun,而在某.cpp文件中包含其头文件,并且使用函数fun,在编译时是不会出现错误的,但在链接的时候就会出现LINK 2001错误(不出现才奇怪呢,这本该是在另一个.obj文件中的,现在那个.obj根本不存在.).
还有,看一下这个#include<iostream>,毫无疑问这个头文件编译器会自己加进来,但这个头文件内的符号在哪里定义(这里就要用定义这个词了)了呢?答案,我也不知道.但并非毫无头绪,我们需要的东西在一些标准库里(注意,我没有用一个,而用了一些),而这些库,对,也是编译器自己链接进来的(kernel32.lib之类的导入库我们是可以看见的,但这些静态库我们真的看不见),所以总有那么一天你会用上这个命令:#pragma comment(lib, "****.lib"),什么意思自己猜(或者在工程设置里面自己加).

 

那现在知道为什么不能说一个.h对应一个.cpp(也包括.c啦)了吗?为人为到底:
C/C++的这些东西:.obj  .lib  .dll都是由.c或.cpp产生的,这些文件里面大多是函数的定义(实现),而对应函数的声明在某些.h(头文件也用于定义一些符号之类的)里,而一个头文件的符号的定义也可以是在多个库里面(记住头文件只是用来告诉编译器有这个东西和这个东西怎么用).不用担心调用时会出现问题,只要你的符号有正确的定义,那么就能正确生成.exe文件(或者.dll,忽略具体细节啦,修复导入段之类的我也不是很清楚,简单想像就是编译器把一它不认识(但知道有)的符号交给链接器:你去找到这些东西,把这些东西按顺序放好,我生成的代码要用到call之类的命令(哥学过一点汇编,大概吧....))

 

欢迎指正.

                                                                                                          2009-12-15

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值