在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是被重复包含了吗?
能举个重复包含影响程序的例子吗? 展开
比如B.cpp 要用到B.h,然后就include了
A.cpp也要用到B.h,然后也include了
那么B.h是被重复包含了吗?
能举个重复包含影响程序的例子吗? 展开
展开全部
是为了避免同一个文件被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
展开全部
重复包含就是一个.cpp文件多次直接或者间接包含同一个.h文件,因为.h文件通常包含定义(比如类的定义),多次包含以后就会导致重复定义问题。
解决办法就是在头文件中包含头文件警卫(header guard):
第一步:在头文件最前面包含以下类容
#ifndef 头文件名_H
#define 头文件名_H
第二步:在头文件末尾包含以下语句
#endif
如果使用的是VC++编译器可以直接在头文件开头加一句 #pragma once 就可以防止重复包含。
解决办法就是在头文件中包含头文件警卫(header guard):
第一步:在头文件最前面包含以下类容
#ifndef 头文件名_H
#define 头文件名_H
第二步:在头文件末尾包含以下语句
#endif
如果使用的是VC++编译器可以直接在头文件开头加一句 #pragma once 就可以防止重复包含。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-03-23
展开全部
头文件内多是一些变量、类的定义,如果重复包含,就有可能出现变量或类重定义。重复包含就是相同的内容包含了两次或多次。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
比如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
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就重复了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询