【初级C语言】文件结构(头文件结构,头文件作用,头文件被重复包含的问题)

【初级C语言】文件结构(头文件结构,头文件作用,头文件被重复包含的问题),第1张

一、头文件 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)

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语言】代码版式(空行,空格,对齐,长行代码,注释)https://blog.csdn.net/zty857016148/article/details/126822909

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/2889564.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-14
下一篇 2022-09-14

发表评论

登录后才能评论

评论列表(0条)

保存