头文件保护
#ifndef SYSTEM_H
和 #define SYSTEM_H
这两行代码是用于 C++ 头文件的 “include guard”(包含保护)。它们的目的是防止同一个头文件在一个编译单元中被多次包含。如果在不同的源文件中多次包含同一个头文件,这可能会导致重复定义错误。使用这种包含保护可以避免这个问题。
当你在一个源文件中包含 system.h 头文件时,预处理器首先检查 SYSTEM_H 宏是否已经定义。如果没有定义,预处理器将继续处理 #define 指令,定义宏 SYSTEM_H,并包含头文件的其余内容。当你再次在同一个源文件中包含 system.h 时,SYSTEM_H 宏已经定义,所以预处理器将跳过整个 #ifndef 到 #endif 之间的代码,防止头文件被多次包含。
以下是包含保护的用法:
- 在头文件的开头,使用
#ifndef
指令来检查一个预处理器宏是否已经定义。这个宏通常是根据头文件名创建的唯一名称,例如本例中的SYSTEM_H
。 - 如果这个宏还没有被定义,那么
#ifndef
后面的代码块会被执行。此时,使用#define
指令定义这个宏。 - 在头文件的末尾,使用
#endif