[技术手册] #include预编译指令

[复制链接]
 楼主| szt1993 发表于 2024-8-15 09:00 | 显示全部楼层 |阅读模式
众所周知#include“xxx.h”的作用是用来包含头文件的,作用是能够调用头文件中的各类枚举/结构体/函数定义等。那么一个C文件是如何通过#include“xxx.h”文件就能编译到那些定义呢?那就要从编译器眼中的#include指令说起。

长话短说,大家可以把#include“xxx.h”看成是文本的展开,简而言之就是通过该指令把h文件里的内容进行了展开。如下范例所示,我们定义一个H文件

  1. //这是一个命名为test.h的H文件
  2. #ifndef TEST_H
  3. #define TEST_H

  4. typedef enum
  5. {
  6. Test_item_1,
  7. Test_item_2,
  8. Test_item_3
  9. }e_Test;
  10. #endif
  11. //这是一个命名为test.c的c文件
  12. //为了调用枚举e_Test,所以需要调用test.h头文件
  13. //在程序猿们的眼中,这是一个h文件被调用的样子
  14. #include "test.h"

  15. void func1()
  16. {
  17. ....
  18. }
  19. //在编译器的眼中,#include调用H文件其实是文本的展开
  20. //这也是为什么很多头文件的开头都是先来一句#ifndef,否则在同一H文件被多处调用的时候,该文件中的定义就会被重复编译,引起报错
  21. #ifndef TEST_H
  22. #define TEST_H

  23. typedef enum
  24. {
  25. Test_item_1,
  26. Test_item_2,
  27. Test_item_3
  28. }e_Test;
  29. #endif

  30. void func1()
  31. {
  32. ....
  33. }

小小蚂蚁举千斤 发表于 2024-8-15 13:25 来自手机 | 显示全部楼层
#include用来标注头文件的指令
中国龙芯CDX 发表于 2024-8-20 15:39 | 显示全部楼层
#include“xxx.h”看成是文本的展开,就是通过该指令把h文件里的内容进行了展开
小夏天的大西瓜 发表于 2024-8-20 16:25 | 显示全部楼层
#include“xxx.h”其实就是头文件调用的包含
 楼主| szt1993 发表于 2024-8-28 08:16 | 显示全部楼层
小夏天的大西瓜 发表于 2024-8-20 16:25
#include“xxx.h”其实就是头文件调用的包含

其实感觉各种语言都是非常接近生活的思维模式进行开发
AdaMaYun 发表于 2024-9-6 08:24 | 显示全部楼层
其实内层就是头文件的调用
jf101 发表于 2024-9-17 21:22 | 显示全部楼层
其实就是调用关系的嵌套
星辰大海不退缩 发表于 2024-9-20 14:35 | 显示全部楼层
#include预编译就是头文件的包含关系
您需要登录后才可以回帖 登录 | 注册

本版积分规则

344

主题

2836

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部