放在结构体定义中的宏定义,请高手点解!

来源:百度文库 编辑:神马文学网 时间:2024/05/02 03:16:03
主  题:  放在结构体定义中的宏定义,请高手点解!
作  者:  zw_2046 (悬崖)
等  级:
信 誉 值:  100
所属社区:  C/C++ C语言
问题点数:  50
回复次数:  10
发表时间:  2005-10-12 17:08:39
今天看到一段代码,里面有个结构体的定义中还包含了常量的宏定义,以前没有见过,感觉很奇怪,不知道进行预处理时,会预处理会做何处理,因此想请大家来看看,这样做有什么含义,为什么不把这些定义放在结构体定义的外部呢?
比如
typedef struct aaa
{
.....
#define STATUS_1 0X02
#define STATUS_2 0X04
#define STATUS_1 0X08
....
}
回复人: qfeng_zhao(天天向上) ( ) 信誉:100  2005-10-12 17:14:20  得分: 0
跟放在外面一样
不过这几个宏只在本结构体内使用,代码读起来比较方便
Top
回复人: jsjjms(找回真我!!!) ( ) 信誉:100  2005-10-12 17:19:40  得分: 0
好象关系到作用域吧?
Top
回复人: cdo(一个坏人) ( ) 信誉:100  2005-10-12 17:28:30  得分: 0
试了一下,#define STATUS_1 0X02 可以在全局使用。这样写可能是为了读代码方便吧。
Top
回复人: zw_2046(悬崖) ( ) 信誉:100  2005-10-13 8:32:56  得分: 0
我开始也怀疑作用域的问题,看来这不成问题了!
综上:是否该宏定义与放在外部是等同的,编译预处理器同样在内存中为每一个定义存储一个常量,而程序中各个部分都能毫无分别的使用该定义呢?而这样写的目的只是在开发过程中便于程序员理解该定义的逻辑意义.
Top
回复人: jixingzhong(瞌睡虫:选择了远方,只顾风雨兼程!) ( ) 信誉:101  2005-10-13 9:30:51  得分: 0
也许把   没有很注意这个问题哦   自己也没有这样用过  呵呵
Top
回复人: lengxiao_wang() ( ) 信誉:100  2005-10-13 13:39:23  得分: 0
补充一下:宏的作用域的问题可以使用#undef/#endif 对定义即可。但是有一点你得注意,不能再函数体内定义宏。
Top
回复人: snowbirdfly(好好学习~好好动手~~~) ( ) 信誉:100  2005-10-13 14:16:28  得分: 0
个人感觉就是便于阅读程序,容易理解~~~
Top
回复人: DiabloWalkOnTheEarth(WorldOfWg( 狗城是个烂代理 )) ( ) 信誉:97  2005-10-13 14:32:29  得分: 0
谁说不能在函数体内定义宏, 只要喜欢, 什么地方定义宏根本就木关系. 宏本来就不是 语言的一部分, 预处理器也根本不会知道宏定义是在结构内还是结构外, 函数内还是函数外.
Top
回复人: bailingke(大钊) ( ) 信誉:100  2005-10-13 14:50:27  得分: 0
编译器根本不知道有什么宏,编译器单元中只有宏定义后面的数字,跟作用域有什么关系?
Top
回复人: zw_2046(悬崖) ( ) 信誉:100  2005-10-13 17:18:00  得分: 0
看来得回家动手试试才知道了哦!