Summary
1)头文件(.h)是源文件(.c)的 接口
定义文件。接口指的是可被其他文件访问的函数或者数据
。如果a.c中想使用b.c中定义的函数或变量,就可以通过b.h来使用,b.h中则声明了b.c中的函数和变量。
2)include中(<>)和("")的区别:#include <header.h>
,指的是在编译系统文件中查找头文件#include "header.h"
,指的是先查找当前工程文件夹,再查找编译系统文件夹
3)头文件的一些规则
:
- 头文件中只做
函数声明
和变量声明
(不做具体定义) - 头文件中
可以定义数据类型
(typedef,struct,union,enum) - 一个头文件可以对应于多个源文件(
多数情况一对一
) - 不要使用#include包含源文件
4)再论全局变量:
普通全局变量
- 源文件中定义的全局变量可以在其他任意源文件中进行使用,如果其他源文件中定义了同名的全局元素,则会发生重复定义错误。(因为即使没有通过extern声明,不可直接可见,但本质各自的作用域仍然是全局的)
- 可使用
extern
关键字在头文件中声明,并在其他文件中使用(如果不声明,则在其他源文件中不可见) - 注意,使用extern声明时的类型和变量名都必须一致,且
不可以给初始值
(否则就会报重复定义错误)。
静态全局变量
static
修饰的全局变量只能在当前源文件中使用
- 无法通过extern关键字声明,也就没有办法在其他文件中使用
5)函数声明
语句默认自带extern
关键字修饰;类型定义必须放在头文件里
,仅仅是类型声明无法创建变量。
6)static函数和static全局变量的行为是一致的。static关键字修饰函数使得函数具有文件作用域
;静态函数无法
在其他文件中被调用;函数设计时就需要考虑是否在其他文件中使用。
多文件程序设计
问题:实际工程开发中,所有的代码都是写在同一个文件中吗?
答:很显然不是。实际的工程开发中,通常是不同工程师或不同的团队负责不同的模块,然后各自的模块组合起来完成整个工程。
多文件编译链接:
问题:不同文件之间如何相互访问各自的程序元素?
多文件之间的相互访问:
每个文件可以定义功能
接口
(可被其他文件访问的函数或数据
)源文件
:代码实现文件,后缀为.c头文件
:源文件的接口定义文件,后缀为.h
当需要使用其他文件提供的功能时
,包含对应的头文件语法:
#include <header.h>
,指的是在编译系统文件中查找头文件
#include "header.h"
,指的是先查找当前工程文件夹
,再查找编译系统文件夹
再论全局变量:
普通全局变量
- 源文件中定义的全局变量可以在其他任意源文件中进行使用
- 可使用
extern
关键字在头文件中声明,并在其他文件中使用(如果不声明,则在其他源文件中不可见)
静态全局变量
static
修饰的全局变量只能在当前源文件中使用
- 无法通过extern关键字声明,也就没有办法在其他文件中使用
本文总结自“狄泰软件学院”唐佐林老师《C语言入门课程》。
如有错漏之处,恳请指正。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。