C语言:#ifndef、#define、#endif-防止头文件被重复包含(重复编译) 作者:马育民 • 2026-03-31 20:57 • 阅读:10001 # 一句话解释 ```c #ifndef __AGRI_CONFIG_H__ #define __AGRI_CONFIG_H__ // 你的代码 #endif ``` 这三行的作用只有一个: **防止头文件被重复包含(重复编译),避免报错!** --- # 逐行翻译(超级通俗) ## 1. `#ifndef __AGRI_CONFIG_H__` **if not define → 如果没有定义过** 意思: **如果之前没定义过 `__AGRI_CONFIG_H__` 这个名字,就继续往下编译。** ## 2. `#define __AGRI_CONFIG_H__` **定义一下 `__AGRI_CONFIG_H__` 这个名字** 作用: **标记一下:这个头文件我已经编译过了!** ## 3. `#endif` 结束判断 --- # 合起来的逻辑(人话版) ``` 如果这个头文件第一次被包含 → 编译里面的内容 如果这个头文件已经被包含过 → 跳过,不编译 ``` **这就叫:头文件保护(Include Guard)** --- # 为什么必须写? 因为你项目里 **很多 .c 文件都会 #include "agri_config.h"** 如果不加这三行 → 头文件被重复包含 → 编译器报错: - 重复定义 - 重复声明 - 结构体重定义 - 函数重定义 加了就 **100% 不会重复编译**。 --- # 命名规则(必须记住) ``` __文件名全大写_H__ ``` 例子: - `agri_config.h` → `__AGRI_CONFIG_H__` - `sht40.h` → `__SHT40_H__` - `fan.h` → `__FAN_H__` - `agri_status.h` → `__AGRI_STATUS_H__` **前后两个下划线 + 全大写 + 下划线分隔 + 最后 H__** --- # 标准模板(你直接复制) ```c #ifndef __AGRI_CONFIG_H__ #define __AGRI_CONFIG_H__ // 这里放结构体、宏定义、函数声明 #endif ``` --- # 终极总结(最关键) **`#ifndef` 三行 = 头文件的防盗门,防止重复编译!** **所有 .h 头文件必须写!** 你现在懂了吗?不懂我再用更简单的比喻讲~ 原文出处:http://www.malaoshi.top/show_1GW330WA9dSh.html