呵呵,#ifndef某种程度上是可以防止变量重复定义的,在某些‘大作’中,经常见到。
#ifndef xxx
#define xxx
unsinged char k1;
#endif
俺也一直弄不明白,为什么有人这些写,这么写到底是为了什么!?
--------- ...
yewuyi 发表于 2011-6-13 17:08
这种非主流用法不在讨论之列
我举个例子
有两个模块
叫做A和B,都有各自的头文件a.h,b.h,都有各自的实现文件a.c,b.c
他们都用到了一个头文件,叫做type.h
在type.h中定义了一些uint32_t,uint16_t,uint8_t之类的类型声明
在a.h中有#include "type.h"
在b.h中有#include "type.h"
现在有一个产品,要求同时使用a,b这两个模块,并且需要交互
如果不用#ifndef 防重复技术
那么#include "type.h"不能出现头文件中
而在使用a和b模块的文件中,只能这样写
#include "type.h"
#include "a.h"
#include "b.h"
也就是说,在使用a,b模块的时候,你必须要知道他们使用了哪些公用的头文件,然后按顺序进行include
如果使用了#ifndef 防重复技术,你不用考虑这些
如果一个系统有a,b,c,d,e,f这几个模块
a,c,d会引用公共的头文件,x.h
b,c,d,e,f会引用公共的头文件,y.h
c,d又会依赖a和f
好了,这下你要同时用这几个模块那就乱套了。 |