您的位置:首页 > 编程语言 > C语言/C++

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

2014-04-25 15:45 435 查看
参考资料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 的方法较为流行。两个方法同时使用时候,两者缺点可能同时保留,不是一个好的选择。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息