面试题答案
一键面试1. #if!defined 宏用于条件编译的基本原理
#if!defined
宏是 C++ 预处理器指令的一部分,用于条件编译。它的基本原理如下:
#if
是条件编译指令,用于判断其后的表达式是否为真。如果表达式为真,则编译#if
与对应的#endif
之间的代码;如果表达式为假,则忽略这段代码。!defined
是一个预处理器运算符,defined
用于检查某个标识符是否已经被定义。!defined
则是取反,即判断某个标识符是否未被定义。当!defined
后的标识符未被定义时,#if!defined
后的表达式为真。
2. 举例说明如何使用它来防止头文件的重复包含
假设有一个头文件 example.h
,内容如下:
// example.h
#ifndef EXAMPLE_H
#define EXAMPLE_H
// 这里放置头文件的实际内容,例如函数声明、结构体定义等
void exampleFunction();
#endif
在上述代码中:
#ifndef EXAMPLE_H
等价于#if!defined(EXAMPLE_H)
,用于检查EXAMPLE_H
这个标识符是否未被定义。- 如果
EXAMPLE_H
未被定义,那么#ifndef
后的表达式为真,执行#define EXAMPLE_H
定义这个标识符,并编译#ifndef
与#endif
之间的代码。 - 如果后续再次包含
example.h
,由于EXAMPLE_H
已经被定义,#ifndef EXAMPLE_H
后的表达式为假,#ifndef
与#endif
之间的代码会被忽略,从而防止了头文件内容的重复编译。
在源文件 main.cpp
中使用该头文件:
#include "example.h"
#include "example.h" // 即使重复包含,也不会导致重复编译问题
int main() {
exampleFunction();
return 0;
}
通过这种方式,有效避免了因头文件重复包含导致的函数重定义、类型重定义等错误。