为什么要用ifndef?
答案:2 悬赏:10 手机版
解决时间 2021-01-19 17:35
- 提问者网友:美人性情
- 2021-01-19 07:25
为什么要用ifndef?
最佳答案
- 五星知识达人网友:躲不过心动
- 2021-01-19 08:42
使用ifndef的头文件都是这样写的:
xxx.h:
#ifndef XXX_H
#define XXX_H
class Xxx{
//... ...
};
#endif
如果这样的话,多次引入xxx.h会像下面这样:
#include "xxx.h"
#include "xxx.h"
#include "xxx.h"
展开为:
#ifndef XXX_H
#define XXX_H
class Xxx{
//... ...
};
#endif
#ifndef XXX_H
#define XXX_H
class Xxx{
//... ...
};
#endif
#ifndef XXX_H
#define XXX_H
class Xxx{
//... ...
};
#endif
xxx.h:
#ifndef XXX_H
#define XXX_H
class Xxx{
//... ...
};
#endif
如果这样的话,多次引入xxx.h会像下面这样:
#include "xxx.h"
#include "xxx.h"
#include "xxx.h"
展开为:
#ifndef XXX_H
#define XXX_H
class Xxx{
//... ...
};
#endif
#ifndef XXX_H
#define XXX_H
class Xxx{
//... ...
};
#endif
#ifndef XXX_H
#define XXX_H
class Xxx{
//... ...
};
#endif
全部回答
- 1楼网友:一叶十三刺
- 2021-01-19 10:19
#include指令的缺陷,导致同一个头文件会被多次引入,使用ifndef可以避免多次引入。
例如一个程序中包含如下文件:dialog.cpp dialog.h network.cpp network.h log.cpp log.h
dialog.cpp中include了network.h和log.h
network.h中也include了log.h
这样dialog.cpp中实际上引入了两次log.h。
在编译的时候,编译器会因为log.h中的函数被定义了两次而报错。
使用ifndef就会避免这个问题。
如果用VC编译器,也可以不使用ifndef,改用#pragma once预编译指令就可以了。
例如一个程序中包含如下文件:dialog.cpp dialog.h network.cpp network.h log.cpp log.h
dialog.cpp中include了network.h和log.h
network.h中也include了log.h
这样dialog.cpp中实际上引入了两次log.h。
在编译的时候,编译器会因为log.h中的函数被定义了两次而报错。
使用ifndef就会避免这个问题。
如果用VC编译器,也可以不使用ifndef,改用#pragma once预编译指令就可以了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯