C语言拾遗:ifndef/define/endif 与 #pragma once

本文介绍了C/C++编程中防止头文件重复包含的两种常见方法:使用ifndef/define/endif预处理指令和使用#pragma once。详细讨论了两者的使用场景、优缺点,并对比了它们之间的差异。

参考资料1:http://blog.sina.com.cn/s/blog_6398cade0100hi69.html

参考资料2:http://baike.baidu.com/link?url=BBlLclfxXknBO5ARxsWVNPyLA8CxMk2AZvjvAIWJC9G41I9X5UIwEYL84eHhsoiQw1MeRJzzwby7a42LEHFCCa


ifndef/define/endif

用法:

假如文件名为xx.h的文件,如下:

#ifndef XX_H	// if not define的意思,XX_H为随意定的,不过一般按文件名来写,全大写,用下划线连接
#define XX_H	// 定义XX_H
//...头文件内容
#endif

这样如果有两个地方都包含这个头文件,在第一次包含头文件时,ifndef可认为为真,所以定义XX_H。
而在第二次包含头文件名时,由于 XX_H 已经有定义了,ifndef为假,所以就不再 include了

优点:方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。任何支持C语言的地方都有效。确保头文件不被重复包含。

缺点:需要留意为每个头文件定义不同的宏名。

#pragma once

用法:
在头文件xx.h中:
#pragma once
//...头文件内容
在编译的时候,同一个文件不会被编译多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。即其唯一性由编译器保证。
优点:不用考虑编写不同的头文件。不存在宏名冲突情况下,难以找出错误在哪。
缺点:依赖于编译器,移植性无法保证。如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。


ifndef/define/endif 的方法较为流行。两个方法同时使用时候,两者缺点可能同时保留,不是一个好的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值