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

zw_2046 2005-10-12 05:08:39
今天看到一段代码,里面有个结构体的定义中还包含了常量的宏定义,以前没有见过,感觉很奇怪,不知道进行预处理时,会预处理会做何处理,因此想请大家来看看,这样做有什么含义,为什么不把这些定义放在结构体定义的外部呢?

比如

typedef struct aaa
{
.....
#define STATUS_1 0X02
#define STATUS_2 0X04
#define STATUS_1 0X08
....
}
...全文
786 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2005-10-13
  • 打赏
  • 举报
回复
也许把 没有很注意这个问题哦 自己也没有这样用过 呵呵
zw_2046 2005-10-13
  • 打赏
  • 举报
回复
我开始也怀疑作用域的问题,看来这不成问题了!
综上:是否该宏定义与放在外部是等同的,编译预处理器同样在内存中为每一个定义存储一个常量,而程序中各个部分都能毫无分别的使用该定义呢?而这样写的目的只是在开发过程中便于程序员理解该定义的逻辑意义.
zw_2046 2005-10-13
  • 打赏
  • 举报
回复
看来得回家动手试试才知道了哦!
bailingke 2005-10-13
  • 打赏
  • 举报
回复
编译器根本不知道有什么宏,编译器单元中只有宏定义后面的数字,跟作用域有什么关系?
  • 打赏
  • 举报
回复
谁说不能在函数体内定义宏, 只要喜欢, 什么地方定义宏根本就木关系. 宏本来就不是 语言的一部分, 预处理器也根本不会知道宏定义是在结构内还是结构外, 函数内还是函数外.
snowbirdfly 2005-10-13
  • 打赏
  • 举报
回复
个人感觉就是便于阅读程序,容易理解~~~
lengxiao_wang 2005-10-13
  • 打赏
  • 举报
回复
补充一下:宏的作用域的问题可以使用#undef/#endif 对定义即可。但是有一点你得注意,不能再函数体内定义宏。
cdo 2005-10-12
  • 打赏
  • 举报
回复
试了一下,#define STATUS_1 0X02 可以在全局使用。这样写可能是为了读代码方便吧。
jsjjms 2005-10-12
  • 打赏
  • 举报
回复
好象关系到作用域吧?
qfeng_zhao 2005-10-12
  • 打赏
  • 举报
回复
跟放在外面一样
不过这几个宏只在本结构体内使用,代码读起来比较方便

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧