众所周知#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()
{
....
}
|