OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4241|回复: 4

关于结构体中使用#define

[复制链接]

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
发表于 2016-7-7 23:58:33 | 显示全部楼层 |阅读模式
3金钱
[mw_shl_code=c,true]struct ip_hdr {
  /* version / header length */
  PACK_STRUCT_FIELD(u8_t _v_hl);
  /* type of service */
  PACK_STRUCT_FIELD(u8_t _tos);
  /* total length */
  PACK_STRUCT_FIELD(u16_t _len);
  /* identification */
  PACK_STRUCT_FIELD(u16_t _id);
  /* fragment offset field */
  PACK_STRUCT_FIELD(u16_t _offset);
#define IP_RF 0x8000U        /* reserved fragment flag */
#define IP_DF 0x4000U        /* dont fragment flag */
#define IP_MF 0x2000U        /* more fragments flag */
#define IP_OFFMASK 0x1fffU   /* mask for fragmenting bits */

小弟想知道在结构体中使用#define到底有什么特殊的用处(或者说有什么好处),恳请大神指导~
小弟也在网上找过资料,如下:
1>不管是在结构体中,还是不在结构体中使用#define,都是有全局的作用域,这个我用实际代码验证过,
因为#define是属于预编译,所以这里使用作用域scope这个概念似乎有点不准确,应该是说在整个.c文件可见.
2>如果在结构体内和结构体外都使用#define AA,这里的AA就有点类似同名变量,在内部自动隐藏同名外部变量的作用域,仅对内部可见.
这个小弟有点不解,既然是在预编译阶段就已经完成编译,那如何进行区分呢?难道在编译结构体内部#define这段代码会使用类似于#ifndef XXX #define XXX进行区分?
3>有人回答说:在内部使用#define的好处就是"和结构体的这个变量密切相关",似乎体现的价值不大啊~~~恳请指教~~~

电子爱好者
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-7-8 09:25:40 | 显示全部楼层
结构体里面用define更多的是为了裁剪功能。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2016-7-9 21:19:09 | 显示全部楼层
看个人喜欢。。。
回复

使用道具 举报

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
 楼主| 发表于 2016-7-11 10:57:24 | 显示全部楼层
正点原子 发表于 2016-7-9 21:19
看个人喜欢。。。

小弟抱着疑惑的心态,以为其中必有玄机~~~
好了,我也安了~~~
电子爱好者
回复

使用道具 举报

5

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2016-2-18
在线时间
13 小时
发表于 2016-7-11 13:57:54 | 显示全部楼层
条件编译,裁剪功能
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 17:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表