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
假如文件名为xx.h的文件,如下:
#ifndef XX_H // if not define的意思,XX_H为随意定的,不过一般按文件名来写,全大写,用下划线连接
#define XX_H // 定义XX_H
//...头文件内容
#endif
这样如果有两个地方都包含这个头文件,在第一次包含头文件时,ifndef可认为为真,所以定义XX_H。
而在第二次包含头文件名时,由于 XX_H 已经有定义了,ifndef为假,所以就不再 include了
优点:方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。任何支持C语言的地方都有效。确保头文件不被重复包含。
缺点:需要留意为每个头文件定义不同的宏名。
在头文件xx.h中:
优点:不用考虑编写不同的头文件。不存在宏名冲突情况下,难以找出错误在哪。
缺点:依赖于编译器,移植性无法保证。如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。
ifndef/define/endif 的方法较为流行。两个方法同时使用时候,两者缺点可能同时保留,不是一个好的选择。
参考资料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 的方法较为流行。两个方法同时使用时候,两者缺点可能同时保留,不是一个好的选择。
相关文章推荐
- #pragma once 和 #ifndef ... #define ... #endif 的区别
- #pragma once 与 #ifndef...#define...#endif的比较
- #pragma once 和#ifndef ... #define ... #endif 比较
- #pragma once 和#ifndef ... #define ... #endif 比较
- pragma once VS ifndef define endif
- #pragma once 和 #ifndef ... #define ... #endif 的区别【转载】
- #pragma once 和 #ifndef ... #define ... #endif 的区别【转载】
- #pragma once 和 #ifndef ... #define ... #endif 的区别【转载】
- [Windows编程] #pragma once 和#ifndef ... #define ... #endif 比较
- [Windows编程] #pragma once 和#ifndef ... #define ... #endif 比较
- 头文件中ifndef/define/endif的作用以及#pragma once使用
- #pragma once 和#ifndef ... #define ... #endif 比较
- #pragma once 和#ifndef ... #define ... #endif 比较
- #pragma once 和#ifndef ... #define ... #endif 比较
- [Windows编程] #pragma once 和#ifndef ... #define ... #endif 比较
- [Windows编程] #pragma once 和#ifndef ... #define ... #endif 比较
- #pragma once 和#ifndef ... #define ... #endif 比较
- #ifndef……#define……#endif与#pragma once
- #ifndef..#define..#endif和#pragma once的区别
- 如何避免重复包含一个头文件?#ifndef #define #endif #Pragma