概述
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
最后
以上就是幸福天空为你收集整理的c语言头文件的全部内容,希望文章能够帮你解决c语言头文件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复