C++ #ifndef #define创建宏防止头文件重复定义

发布时间:2024年01月20日

#ifndef 和 #define

#ifndef  _LAYERS_HPP_
#define  _LAYERS_HPP_

内容

#endif // _LAYERS_HPP_

前两行代码是C++中的预处理器指令,用于条件编译(conditional compilation)和防止头文件的多重包含。

  1. #ifndef _LAYERS_HPP_ 表示 “if not defined”,即如果 _LAYERS_HPP_ 没有被定义过,则执行下面的代码。这是一个条件编译的开始。

  2. #define _LAYERS_HPP_ 表示将 _LAYERS_HPP_ (只是一个名字)定义为一个宏。这个宏的作用是用来防止头文件的多重包含。当第一次包含该头文件时,这个宏被定义,以后再次包含同一头文件时,由于已经定义过,就会跳过头文件的内容,避免重复定义。

这种预处理器指令通常用于头文件的保护机制,确保头文件在一个编译单元中只被包含一次,防止重定义和编译错误。

案例

假设你有一个头文件 Layers.hpp,内容如下:

// Layers.hpp
#ifndef _LAYERS_HPP_
#define _LAYERS_HPP_

// 这里放置头文件的实际内容

#endif // _LAYERS_HPP_

现在,假设你有两个源文件 Main1.cppMain2.cpp,它们都需要使用 Layers.hpp。在这两个源文件中,你可以这样使用:

// Main1.cpp
#include "Layers.hpp"

// 这里可以使用 Layers.hpp 中定义的内容
// Main2.cpp
#include "Layers.hpp"

// 这里同样可以使用 Layers.hpp 中定义的内容

当你编译 Main1.cppMain2.cpp 时,Layers.hpp 只会被包含一次,即使它在两个源文件中都被引用。这是因为预处理器会根据 #ifndef#define#endif 来检测是否已经包含了该头文件。第一次包含时,_LAYERS_HPP_ 被定义,头文件内容被包含;以后再次包含时,由于 _LAYERS_HPP_ 已经定义,预处理器会跳过头文件内容,防止重复定义。

文章来源:https://blog.csdn.net/qq_42864343/article/details/135709091
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。