问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++ 防止头文件重复include问题

发布网友 发布时间:2022-05-13 21:00

我来回答

5个回答

热心网友 时间:2023-10-28 04:30

都是为了避免同一个文件被include多次:
1 #ifndef方式
2 #pragma once方式

在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。
方式一:

#ifndef __SOMEFILE_H__
#define __SOMEFILE_H__
... ... // 一些声明语句
#endif

方式二:

#pragma once
... ... // 一些声明语句

#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况

#pragma once则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当然,相比宏名碰撞引发的“找不到声明”的问题,重复包含更容易被发现并修正。

方式一由语言支持所以移植性好,方式二 可以避免名字冲突。

一般可以这样处理:

#infndef XX
#define XX
#if _MSC_VER > 1000
#pragma once
#endif
.
.
#endif

注意:_MSC_VER 是出于版本兼容性考虑,定义
Defines the compiler version. Defined as 1200 for Microsoft Visual C++ 6.0. Always defined.

参考资料:http://www.sciencenet.cn/blog/user_content.aspx?id=13371

热心网友 时间:2023-10-28 04:30

#pragma once
这个指令是后来才加的,以前的版本没有。

新的 vc 2008 生成的代码, 只在开头地方加 #pragma once 一句了,其他的都省略了。

热心网友 时间:2023-10-28 04:31

常使用的#ifndef和#endif语句。
比如说在头文件中要#define IRremote_h,则可以使用
#ifndef IRremote_h
#define IRremote_h
//如果重复,这里的代码将被跳过

#endif

热心网友 时间:2023-10-28 04:32

因为#pragma once是后来引入的功能。必须要在MSC版本数满足要求时才能使用。

热心网友 时间:2023-10-28 04:32

你如果是用的编译器自带的文件,它们会自动判别的。
如果你自己定义的头文件
简单的在头文件的这样就可以了啊

myh1.h
#if! defined MYH1
#define MYH1
#endif

这样你怎么include都保证不会重复。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
长沙到西昌。坐火车先从长沙到成都、成都东,再到西昌,哪个方便一些 S先生与P先生谜题的题面 为什么首都设在襄阳 改姓可以不随父母性吗 韩艺瑟怎么改姓? 纸、墨、笔、砚是中国传统的文房四宝,墨的使用最早在 [ ] A.商代后期... 想问下创维光伏E企赢模式有哪些优势,到底值不值得投资啊?有没有合作... 太平洋太享e保百万医疗值得入手吗?每年花多少钱? 爱e满分适合哪些人买?注意哪些问题? 太平洋太享e保百万医疗适合哪些人买?价格多少? (C语言)定义宏 以防止重复包含此头文件 这句话是什么意思?? 信用分如何查询 头文件被重复包含有什么坏处?头文件被循环包含有什么坏处? 如何避免重复包含头文件,生产尽量不冲突的宏 “#ifndef #define #endif ”防止头文件被重复包含 C++中,如何防止一个头文件内容被重复包含? C语言头文件避免重复包含,pragma once和#ifndef的区别 在c/c++中如何避免头文件被多次包含? c语言如何避免重复包含头文件? 沈阳四台子中国石油加油站自助加油优惠多少 工行中国石油信用卡,可以在中石油加油站自助加油吗?是不是和加油充值卡功能一样的 有没有有人发现使用中石油的加油卡,在自助加油机上加油时,每次插入加油卡输入密码后都会少1元钱呢? 中国石油有自助加油机吗? 员工薪资调整要提前多久通知 谁能发给我一些有关人力资源类工作中需要用到的资料啊,列如人事考勤表、绩效考核表、员工工资调整表等 excel在调整前工资表中对工资统一调整所有员工基本工资上调100 多喝蜂蜜水好吗 成都有没有微商城注册机构 最近经常在外面吃饭,辣椒吃得比较多,有些上火,多喝蜂蜜水有用吗? 过年油腻吃多了,喝蜂水解油腻吗? 两个源文件都包含了同一个头文件,但是已经做了防止重复包含的处理,为啥还是冲突呢 定义宏防止头文件重复包含问题 关于C语言中的#ifndef。。。endif 的用法,求高手详解 爽感的四川话是什么意思 爽感是什么意思 “爽”的意思是什么? 爽的感觉是一种什么感觉? 爽是什么感觉 真爽是什么意思?什么感觉?? 人类因为什么而感到爽,爽的根源是什么? 她总是这样说:“太爽了!很爽的感觉。”她是什么意思呢? 爽的字义是什么 爽是什么感觉,为什么人会感到爽,做什么事情最爽? 鸡汤能下奶吗 鸡汤下奶吗? 喝鸡汤下奶吗 吃鸡肉鸡汤会下奶吗 我一受凉或者喝点凉的就拉肚子,怎么回事 产后喝鸡汤对下奶好不好 做月子喝鸡汤能下奶吗