一、头文件
1. 头文件的作用
1. 不用在各个源文件中做重复的声明
2. 组织项目结构的时候,减少大型项目的维护成本(修改了定义,只需修改头文件中对应的声明)
3. 通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。(下文有编译和使用二进制库的详细过程)
4. 头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。
2. 头文件的命名
头文件最好与对应的源文件同名(main.c不需要),源文件中存放定义,而头文件中存放声明
3. 头文件的结构
1. #pragma once或ifndef/define/endif 结构(为防止头文件被重复引用)
2. 标准库的头文件 (#include <…>)
3. 非标准库的头文件 (#include “…”)
4. #define宏定义
5. typedef自定义类型
6. 构造类型的声明(如结构体,枚举等)
7. 全局变量的声明(必须加extern)
8. 函数的声明(建议加extern)
注意:头文件中只能写全局变量的声明,不能定义全局变量,否则在链接时会造成重定义错误。(除非定义成static全局变量,仅在当前文件可见)
4. extern声明
1. 全局变量的声明必须带上extern。因为头文件中只能包含声明,不带extern无法确定到底是声明还是定义
2. 函数的声明建议带上extern。建议函数怎么定义就怎么声明(包括参数类型和参数名)便于理解代码。
3. 为什么全局数据的链接属性默认是外部的?因为多个文件之间后续一定要进行数据交互。
5. 头文件被重复包含的问题
1. 头文件被重复包含是下面这样的现象:
A文件里包含了C文件,
B文件里也包含了C文件,
然后A文件又把B文件包含了进来。
这样,相当于A文件包含了两次C文件,这就是文件包含处理时文件被重复包含的问题。
文件包含时重复包含问题有时候会带来一些问题,典型的就是重定义问题,会导致编译通不过。或者编译通过,但是会造成编译效率降低。
2. 如何防止头文件被重复多次的包含?
方法一:
方法二:
二、定义文件(源文件)
1. 源文件的结构
1. 对一些头文件的引用
2. 全局变量的定义
3. 函数的定义
2. 源文件的双重保护
1. static封装具体的业务流程(实现了对源文件业务流程细节的保护)
2. 将源文件编译成静态库文件(隐藏源代码的内容,通过头文件来调用库功能)
3. static为源文件提供安全保证:
将源文件中实现具体细节的函数和全局变量用static修饰,封装在源文件内。
只将有外部需求的功能性函数暴露在头文件中。这样就实现了对源文件业务流程细节的保护
4. 如何将源文件编译成静态库文件?(环境VS2013):
开发者:
1. 编写源文件和头文件(文件公开时应在头文件中介绍函数的使用方法。)
2. 将项目(项目包括源文件和头文件)属性中的配置类型改为静态库
3. 重新编译程序
4. 在项目文件夹中的Debug文件夹下会产生静态库文件(.lib),该文件为二进制文件无法阅读
用户:
1. 将静态库文件和对应的头文件,放到项目文件夹下。
2. 将头文件导入项目文件,使用#include “***.h”预处理指令引用头文件
3. 使用#pragma comment(lib,”***.lib”)预处理指令导入静态库。
4.调用在头文件中声明的函数
5. 运行程序
三、分享交流
欢迎在评论区交流!如果文章有错误还请大家指出!
【C语言初阶】文件结构(头文件结构,头文件作用,头文件被重复包含的问题)
今天的文章c语言怎么创建头文件_c语言的三种基本结构分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/82040.html