面试题答案
一键面试- #if!defined宏实现头文件保护的原理:
#if!defined
结合#define
用于防止头文件被重复包含。当编译器第一次遇到头文件时,#if!defined
检查某个特定的宏是否已定义。如果未定义,#if!defined
条件为真,头文件中的内容会被编译,并且通过#define
定义一个唯一的宏。当下次编译器再遇到这个头文件时,由于之前已经定义了该宏,#if!defined
条件为假,头文件中的内容就不会再次被编译,从而避免了重复定义的错误。
- 举例说明具体代码结构:
假设我们有一个名为
example.h
的头文件,代码如下:
// example.h
#ifndef EXAMPLE_H // 等价于 #if!defined(EXAMPLE_H)
#define EXAMPLE_H
// 头文件内容,例如声明函数、结构体等
void exampleFunction();
struct ExampleStruct {
int value;
};
#endif
在上述代码中,#ifndef EXAMPLE_H
检查 EXAMPLE_H
这个宏是否已定义。如果未定义,就执行 #define EXAMPLE_H
定义这个宏,并且编译下面声明函数和结构体的代码。如果头文件再次被包含,EXAMPLE_H
已经定义,#ifndef EXAMPLE_H
条件不成立,就不会重复编译函数和结构体的声明部分,避免了重复定义错误。