面试题答案
一键面试方法一:#ifndef
、#define
、#endif
- 原理:在头文件开头使用
#ifndef
检查某个宏是否已定义,如果未定义,则使用#define
定义该宏,并编写头文件内容,最后使用#endif
结束条件编译。例如:
#ifndef HEADER_FILE_NAME_H
#define HEADER_FILE_NAME_H
// 头文件内容
#endif
- 优点:
- 几乎所有C++编译器都支持,兼容性好。
- 简单易懂,易于上手和维护。
- 缺点:
- 如果宏命名不唯一,可能会导致意外的冲突。
- 每次编译都需要进行宏定义的检查,对于大型项目可能会增加编译时间。
方法二:#pragma once
- 原理:这是一个编译器指令,告诉编译器这个头文件只会被包含一次。编译器通过内部机制来确保该头文件在整个编译单元中只被处理一次。
#pragma once
// 头文件内容
- 优点:
- 书写简单,无需手动定义宏。
- 编译器通常通过更高效的内部机制实现,编译速度可能更快。
- 缺点:
- 不是所有编译器都支持,兼容性不如
#ifndef
方式。例如,早期的一些老版本编译器可能不支持该指令。
- 不是所有编译器都支持,兼容性不如