struct结构里的#define定义.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
struct结构里的#define定义

关于宏的作用域 1.???? 宏没有可见域。 ?????? ?如果说有,那就是从本文件(包括被包含的文件)中,该宏定义处开始,至文件的尾部或取消宏(#undef)为止。 2.???? 考虑一种特殊情况: ??????? 一个宏定义,如果写在结构体之内,即使与结构体之外的宏定义名字重复了最多是编译警告。可是如果不在结构体之内,名字重复可肯定是error。(未证实,可以做实验,而且可以把两处的宏定义成不同的值,会是什么情况?) ??????? 定义在结构体之内的宏在结构体内可以隐藏定义在结构体之外定义的宏,如果都在结构体之外定义,那么就是定义了两个相同的宏,而一个在内,一个在外,则结构体内只看到内部定义的宏,而结构体外只看到外部定义的宏,跟变量的隐藏类似。 ??? 宏的处理是在编译的预处理阶段完成的。预处理器根本就不认识什么结构体,在C语言编译器编译这个C文件中的结构体时,这个define语句已经不存在了。相应的,用到这个宏的地方,宏本身也已经替换成宏的值(这个宏展开)。大家可以用gcc -E命令来只做预处理而不编译,看看出来后的文件。 ? ? 至于为什么在结构体里头#define,是因为这个宏一般用于定义该结构体里头的标志位变量的可能的值,和结构体的这个变量密切相关。放在一起从逻辑上比较容易理解。 今天看到一段代码,里面有个结构体的定义中还包含了常量的宏定义,以前没有见过,感觉很奇怪,不知道进行预处理时,预处理会做何处理,因此想请大家来看看,这样做有什么含义,为什么不把这些定义放在结构体定义的外部呢? 比如 typedef struct aaa { ?..... ?#define STATUS_1 0X02 ?#define STATUS_2 0X04 ?#define STATUS_1 0X08 ?.... }??? 跟放在外面一样 不过这几个宏只在本结构体内使用,代码读起来比较方便 ???? 我开始也怀疑作用域的问题,看来这不成问题了! 综上:是否该宏定义与放在外部是等同的,编译预处理器同样在内存中为每一个定义存储一个常量,而程序中各个部分都能毫无分别的使用该定义呢?而这样写的目的只是在开发过程中便于程序员理解该定义的逻辑意义. ?? ? 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?? ? ? ?? 看来得回家动手试试才知道了哦! ??

文档评论(0)

junjun37473 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档