C 头文件防护机制
理解头文件重复包含的问题,学习使用 #ifndef 等预处理指令防止多重定义错误。 · 难度:入门 · +15XP
头文件防护的必要性
在C语言中,头文件可能被多个源文件甚至同一个源文件多次包含。如果没有防护,会导致类型、函数或变量的重复定义,编译失败。头文件防护(Include Guard)是一种预处理技术,确保头文件内容只被编译一次。
两种常见写法
// 方法一:使用 #ifndef
#ifndef MYHEADER_H
#define MYHEADER_H
// 头文件内容
void func(void);
#endif
// 方法二:使用 #pragma once(非标准但广泛支持)
#pragma once
void func(void);
表格:对比
| 方式 | 优点 | 缺点 |
|---|---|---|
| #ifndef | 标准C,可移植 | 宏名需唯一,易冲突 |
| #pragma once | 简洁,编译快 | 非所有编译器支持 |
练习提示
尝试在 starter_code 中两次包含同一个头文件(去掉防护),观察编译错误。然后加上防护,再次编译验证通过。