.h头文件的作用

   .h头文件以前也没觉得如何的难用,总是在需要的时候就随手包含了进去,但现在看这些代码,总感觉心里不踏实,不知道在什么时候需要包含,什么时候没有必要包含,vc编译器在编译的时候是怎么处理.h和.cpp文件的,主要是对编译器原理太不熟悉,没办法,今天特意开辟了半天的时间好好的找了些资料,耐心地看看高人们的讲解,这里只是列出下自己现在对今天看到的知识做些总结。编译器的编译单位是.cpp文件,对每个cpp文件都生成一个.obj的目标文件,最后link连接成.exe可执行文件。合理地使用.h文件能够很好地理清项目工程的结构和提高编译的效率。头文件主要是对函数、全局变量的声明和一些宏的定义,.h文件是不参与编译的,#include宏的作用就是预处理的时候在使用这句话的地方用.h文件的内容替换掉这句话。

 

   声明的作用也只是告诉编译器,某个函数或者变量符合在调用之前在程序的某处已经定义过,编译的时候不报错,#if !defined和#endif两个指令主要哦是为了避免在同一个编译模块(一个.cpp文件)中避免重复包含同一个.h文件。

 

由于C++对函数和变量的默认作用域都是文件级的(extern),也即是一个cpp文件是可以引用另一个cpp文件中定义的函数或者全局变量的,只要在包含相应的声明即可,在link程序连接.obj文件的时候会自动替我们找到对应的定义。

 

在编译器编译的时候,cpp文件定义的全局变量和函数在生成.obj文件中都有相应的外部标号,正是通过这个标号,link才能找到对应的定义,完成调用前的指向,如果用static关键字定义的变量和函数,则表明此变量和函数是文件内部的,编译器不产生外部标号,那么即使在别的.cpp文件中有此声明,在link的阶段也会报错。

 

另外类的定义跟函数和变量的定义有所不同,类的定义只是告知编译器此种类型所需的字节数和其他信息,并不分配内存空间,不能在同一个头文件中包含其定义,因为这样的话在编译器就不知道如何选择对应类的信息,而函数和变量是在同个文件可以重复包含的。

 

(写的很随意,把自己想起来的记了下来,只当回忆……)

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值