结构体内的#define宏定义

结构体内的#define宏定义

1398人阅读 评论(2) 收藏 举报

关于宏的作用域

1.     宏没有可见域。

        如果说有,那就是从本文件(包括被包含的文件)中,该宏定义处开始,至文件的尾部或取消宏(#undef)为止。

2.     考虑一种特殊情况:

        一个宏定义,如果写在结构体之内,即使与结构体之外的宏定义名字重复了最多是编译警告。可是如果不在结构体之内,名字重复可肯定是error。(未证实,可以做实验,而且可以把两处的宏定义成不同的值,会是什么情况?)

        定义在结构体之内的宏在结构体内可以隐藏定义在结构体之外定义的宏,如果都在结构体之外定义,那么就是定义了两个相同的宏,而一个在内,一个在外,则结构体内只看到内部定义的宏,而结构体外只看到外部定义的宏,跟变量的隐藏类似。

    宏的处理是在编译的预处理阶段完成的。预处理器根本就不认识什么结构体,在C语言编译器编译这个C文件中的结构体时,这个define语句已经不存在了。相应的,用到这个宏的地方,宏本身也已经替换成宏的值(这个宏展开)。大家可以用gcc -E命令来只做预处理而不编译,看看出来后的文件。

    至于为什么在结构体里头#deifne,是因为这个宏一般用于定义该结构体里头的标志位变量的可能的值,和结构体的这个变量密切相关。放在一起从逻辑上比较容易理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值