关于#define

qiujindong18 2012-11-18 09:53:32
请问如下两个语句是什么意思,及其执行效果?

1、#define get_ext4_header(i) ((struct ext4_extent_header *) (i)->i_block)
注:ext4_extent_header 是一个构造,(i)->i_block 是 uint32_t

2、#define EXT_FIRST_EXTENT(__hdr__) \
((struct ext4_extent *) (((char *) (__hdr__)) + \
sizeof(struct ext4_extent_header)))
注:ext4_extent、ext4_extent_header是构造


关于语句1, i_block是在一个构造里的,#define get_ext4_header(i) 是否默认了i为一个构造呢?
(struct ext4_extent_header *)是否强行把 (i)->i_block 转成一个构造呢?

关于语句2,结构1是差不多,关键在与每行最后的 "\" ,其意思是换行吗?还有就是sizeof(构造)是不是返回一个构造里所有声明类型的字节大小?


本人菜鸟,莫见笑。
请高手们不要吝啬教导,谢谢。

另外,以上语句来自一个Qt程序,这两个语句是C的标准语句吗?以上语句在VB.net如何实现?
...全文
177 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiujindong18 2012-11-20
  • 打赏
  • 举报
回复
引用 3 楼 qin_zhu 的回复:
sizeof(结构)返回的是一个结构体所站内存的大小,不是每个数据类型的大小,这个涉及到字节对齐。
受教了。。
qiujindong18 2012-11-20
  • 打赏
  • 举报
回复
引用 2 楼 qin_zhu 的回复:
引用 楼主 qiujindong18 的回复:请问如下两个语句是什么意思,及其执行效果? 1、#define get_ext4_header(i) ((struct ext4_extent_header *) (i)->i_block) 注:ext4_extent_header 是一个构造,(i)->i_block 是 uint32_t 2、#de……
明白,感谢了
qiujindong18 2012-11-19
  • 打赏
  • 举报
回复
引用 1 楼 breakfisher 的回复:
1、#define get_ext4_header(i) ((struct ext4_extent_header *) (i)->i_block) 注:ext4_extent_header 是一个构造,(i)->i_block 是 uint32_t 这个应该是返回 (i)->i_block, 并将其强制转换为(struct ext4_extent_hea……
首先感谢你的回复。 在c里一个uint32_t( (i)->i_block )类型可以强制转换为一个构造( struct ext4_extent_header * )? 这个在VB.NET中如何实现呢?
转角天边 2012-11-19
  • 打赏
  • 举报
回复
define的使用技巧可以看下这篇文章,我转载的 http://blog.csdn.net/anhuizhuanjiao/article/details/8186552
rangf 2012-11-19
  • 打赏
  • 举报
回复
引用 楼主 qiujindong18 的回复:
请问如下两个语句是什么意思,及其执行效果? 1、#define get_ext4_header(i) ((struct ext4_extent_header *) (i)->i_block) 注:ext4_extent_header 是一个构造,(i)->i_block 是 uint32_t 2、#define EXT_FIRST_EXTENT(_……
第一个,从字面上理解就是获取ext4的头部,这个值保存在结构体i的成员i_block里边,(struct ext4_extent_header *)就是将获取到得i_block转换为ext4_extent_header的指针类型。 第二个,\就是换行,表述下一行还是属于这个define语句。 sizeof(构造)是返回一个构造里所有声明类型的字节大小,注意这里边有个对齐的计算。
qin_zhu 2012-11-18
  • 打赏
  • 举报
回复
sizeof(结构)返回的是一个结构体所站内存的大小,不是每个数据类型的大小,这个涉及到字节对齐。
qin_zhu 2012-11-18
  • 打赏
  • 举报
回复
引用 楼主 qiujindong18 的回复:
请问如下两个语句是什么意思,及其执行效果? 1、#define get_ext4_header(i) ((struct ext4_extent_header *) (i)->i_block) 注:ext4_extent_header 是一个构造,(i)->i_block 是 uint32_t 2、#define EXT_FIRST_EXTENT(__hdr__) \ ((……
"\"像你所说的,为了提高可读性。
breakfisher 2012-11-18
  • 打赏
  • 举报
回复
1、#define get_ext4_header(i) ((struct ext4_extent_header *) (i)->i_block) 注:ext4_extent_header 是一个构造,(i)->i_block 是 uint32_t 这个应该是返回 (i)->i_block, 并将其强制转换为(struct ext4_extent_header *)形式 2、#define EXT_FIRST_EXTENT(__hdr__) \ ((struct ext4_extent *) (((char *) (__hdr__)) + \ sizeof(struct ext4_extent_header))) 注:ext4_extent、ext4_extent_header是构造 这个是先将__hdr__转变为 char*, 然后加上偏移量sizeof(struct ext4_extent_header)), 就是指针移动sizeof的值后再返回,并强制转换为(struct ext4_extent *)。 #define的作用就是字符替换,将字符替换回去分析就可以

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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