众所周知#include“xxx.h”的作用是用来包含头文件的,作用是能够调用头文件中的各类枚举/结构体/函数定义等。那么一个C文件是如何通过#include“xxx.h”文件就能编译到那些定义呢?那就要从编译器眼中的#include指令说起。
长话短说,大家可以把#include“xxx.h”看成是文本的展开,简而言之就是通过该指令把h文件里的内容进行了展开。如下范例所示,我们定义一个H文件
- //这是一个命名为test.h的H文件
- #ifndef TEST_H
- #define TEST_H
- typedef enum
- {
- Test_item_1,
- Test_item_2,
- Test_item_3
- }e_Test;
- #endif
- //这是一个命名为test.c的c文件
- //为了调用枚举e_Test,所以需要调用test.h头文件
- //在程序猿们的眼中,这是一个h文件被调用的样子
- #include "test.h"
- void func1()
- {
- ....
- }
- //在编译器的眼中,#include调用H文件其实是文本的展开
- //这也是为什么很多头文件的开头都是先来一句#ifndef,否则在同一H文件被多处调用的时候,该文件中的定义就会被重复编译,引起报错
- #ifndef TEST_H
- #define TEST_H
- typedef enum
- {
- Test_item_1,
- Test_item_2,
- Test_item_3
- }e_Test;
- #endif
- void func1()
- {
- ....
- }
|