首页 > 后端开发 > C++ > 为什么 Include Guard 无法防止相互递归和多重定义?

为什么 Include Guard 无法防止相互递归和多重定义?

Susan Sarandon
发布: 2024-12-30 17:20:17
原创
277 人浏览过

Why Do Include Guards Fail to Prevent Mutual Recursion and Multiple Definitions?

为什么不使用包含防护来防止相互递归包含?

包含防护保护头文件免受相互递归包含。

当相互包含的标头中的数据结构定义之间存在依赖关系时,就会出现问题。例如:

// a.h
#include "b.h"

struct A
{
    ...
};

// b.h
#include "a.h"

struct B
{
    A* pA; // error: class A is forward-declared but not defined
};
登录后复制

要解决此问题,应使用前向声明而不是包含防护:

// b.h
#include "a.h"

// Forward declaration of A
struct A;

struct B
{
    A* pA;
};
登录后复制

为什么不使用包含防护来防止多个定义?

包含防护保护标头免受同一翻译单元中的冗余包含。然而,由于存在于不同的翻译单元中,多个定义仍然可能出现。

要解决此问题,可以使用 inline 关键字来允许不同翻译单元中的多个定义:

// header.h
inline int f()
{
    ...
}
登录后复制

或者,可以将函数定义移动到单独的源文件中以防止多个定义:

// source.cpp
int f()
{
    ...
}
登录后复制

以上是为什么 Include Guard 无法防止相互递归和多重定义?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板