在c++中为什么要防止头文件被重复包含?

怎么才算是重复包含呢?比如B.cpp要用到B.h,然后就include了A.cpp也要用到B.h,然后也include了那么B.h是被重复包含了吗?能举个重复包含影响程序... 怎么才算是重复包含呢?
比如B.cpp 要用到B.h,然后就include了
A.cpp也要用到B.h,然后也include了
那么B.h是被重复包含了吗?
能举个重复包含影响程序的例子吗?
展开
 我来答
sinba1
2015-08-08 · TA获得超过1098个赞
知道小有建树答主
回答量:428
采纳率:33%
帮助的人:241万
展开全部
 是为了避免同一个文件被include多次使用,
 一、#pragma once(比较常用)
这是一个比较常用的指令,只要在头文件的最开始加入这条指令就能够保证头文件被编译一次
#pragma once用来防止某个头文件被多次include,#ifndef,#define,#endif用来防止某个宏被多次定义。
#pragma once是编译相关,就是说这个编译系统上能用,但在其他编译系统不一定可以,也就是说移植性差,不过现在基本上已经是每个编译器都有这个定义了。
#ifndef,#define,#endif这个是C++语言相关,这是C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式
二、#ifndef~#define~#endif
1: #ifndef SALESITEM_H2: 
   #define SALESITEM_H3: 
    // Definition of Sales_itemclass and related functions goes here4: 
   #endif
   
   示例:
   "CA.h":
#ifndef HEADER_CA
#define HEADER_CA
#include "CB.h"
 
class CA
{
         CB* pB;
         CB b;//正确,因为此处已经知道CB类的大小,且定义了CB,可以为b分配空间
};
 
#endif
---------------
(2)"CB.h":
#ifndef HEADER_CB
#define HEADER_CB
 
class CA;//这个必须要用,不能只用#include "CA.h",如果只是#include "CA.h"而没有class CA;则会报错. 
class CB
{
         CA* pA;
         //CA a;//错误,因为此时还不知道CA的大小,无法分配空间
};
 
#endif
帐号已注销
2014-03-23 · TA获得超过3954个赞
知道大有可为答主
回答量:1636
采纳率:77%
帮助的人:1221万
展开全部
重复包含就是一个.cpp文件多次直接或者间接包含同一个.h文件,因为.h文件通常包含定义(比如类的定义),多次包含以后就会导致重复定义问题。

解决办法就是在头文件中包含头文件警卫(header guard):
第一步:在头文件最前面包含以下类容
#ifndef 头文件名_H
#define 头文件名_H

第二步:在头文件末尾包含以下语句
#endif

如果使用的是VC++编译器可以直接在头文件开头加一句 #pragma once 就可以防止重复包含。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-03-23
展开全部
头文件内多是一些变量、类的定义,如果重复包含,就有可能出现变量或类重定义。重复包含就是相同的内容包含了两次或多次。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
巨润利020
2014-03-23 · TA获得超过171个赞
知道小有建树答主
回答量:307
采纳率:100%
帮助的人:261万
展开全部
比如B.cpp 要用到B.h,然后就include了
A.cpp也要用到B.h,然后也include了

然后再主函数里同时用到B.cpp和A.cpp里面的函数,所以主函数要include B.h, include A.h、、、、而A.h已经include B.h
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-03-23
展开全部
比如a包含c和b,但是b还包含c,c就重复了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式