面试题答案
一键面试- #if!defined宏的作用:
#if!defined
宏用于条件编译。它结合#define
一起使用,#if!defined
判断一个标识符是否未被定义。如果标识符未被定义,那么其后续到#endif
之间的代码会被编译;如果标识符已被定义,这部分代码将被跳过不编译。在C++模块化开发中,它主要用于防止头文件的重复包含,避免同一头文件内容被多次编译,从而导致诸如重复定义等错误。
- 防止头文件重复包含的简单示例:
- 假设有一个头文件
example.h
,内容如下:
- 假设有一个头文件
// example.h
// 定义一个宏来标记该头文件是否已被包含
#if!defined(EXAMPLE_H)
#define EXAMPLE_H
// 这里写头文件的实际内容,比如定义一个类
class Example {
public:
void printMessage();
};
#endif
- 然后在
example.cpp
源文件中包含这个头文件:
// example.cpp
#include "example.h"
#include <iostream>
void Example::printMessage() {
std::cout << "This is an example message." << std::endl;
}
- 在
main.cpp
中也包含这个头文件:
// main.cpp
#include "example.h"
int main() {
Example ex;
ex.printMessage();
return 0;
}
在上述示例中,#if!defined(EXAMPLE_H)
和#define EXAMPLE_H
共同作用,当第一次包含example.h
时,EXAMPLE_H
未被定义,所以头文件内容被编译,同时定义了EXAMPLE_H
。当再次包含example.h
时,EXAMPLE_H
已被定义,#if!defined(EXAMPLE_H)
条件不成立,头文件内容不再被编译,从而防止了重复包含。