c语言头文件

c语言头文件


每个C++/C程序通常分为两个文件。一个文件用于保存程序的声明(declaration),称为头文件。

另一个文件用于保存程序的实现(implementation),称为定义(definition)文件。


C++/C程序的头文件以“.h”为后缀,
C程序的定义文件以“.c”为后缀,
C++程序的定义文件通常以“.cpp”为后缀(也有一些系统以“.cc”或“.cxx”为后缀)。


编译器的编译单位是.cpp文件,对每个cpp文件都生成一个.obj的目标文件,最后link连接成.exe可执行文件。


头文件主要是对函数、全局变量的声明和一些宏的定义,.h文件是不参与编译的,#include宏的作用就是预处理的时候在使用这句话的地方用.h文件的内容替换掉这句话。


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


在编译器编译的时候,cpp文件定义的全局变量和函数在生成.obj文件中都有相应的外部标号,正是通过这个标号,link才能找到对应的定义,完成调用前的指向。


如果用static关键字定义的变量和函数,则表明此变量和函数是文件内部的,编译器不产生外部标号,那么即使在别的.cpp文件中有此声明,在link的阶段也会报错。


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


写头文件:
头文件由三部分内容组成:
(1)头文件开头处的版权和版本声明。
(2)预处理块。 为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。
(3)函数和类结构声明等。


建议:
1. 系统中为每个功能模块创建一个.h头文件。
   一个功能模块实现系统的一个方面功能,它可能由多个.c和.asm文件来实现,为它创建一个.h头文件。


2. 把一个模块的公共接口的函数声明放到.h文件中。这是public函数。


3. 不要在.h头文件中放私有函数或私有宏, 把它们放到.c文件中,并用static修饰函数。


4. 在.h头文件中,不要有执行的代码和变量声明,除非是inline函数。


5. 在.h头文件中,不要暴露变量,在.c中声明变量,如果外部需要使用这个变量,在.h中使用extern关键字来暴露变量。


6. 在.h头文件中,不要暴露任何特定模块相关的数据结构的内部格式。
在.h头中,不要声明具体数据结构,如struct {...} foo,而是把它放到.c中,如果模块中需要这个结构输入或输出,在头中定义一个类型typedef struct foo module_type,这样客户模块可以创建它的实例。客户模块不必知道具体的foo结构的内部细节。


头文件的作用:
(1)通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。
(2)头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。


编译预处理 #ifnde, #define, #endif
http://blog.csdn.net/u012480384/article/details/44495865
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值