社区
C++ 语言
帖子详情
关于#define的小问题
gaoxingbugaoxing
2005-03-10 08:26:09
#define LIST_ENTRY(ptr, type, member) \
((type *) ((char *) (ptr) - (unsigned long) (&((type *) 0)->member)))
~~~~
什么意思?
程序中的使用:
p = LIST_ENTRY(pos, UdpSession, listItem);
我想知道define中的0是什么意思,大家帮我看看,谢谢了
...全文
73
1
打赏
收藏
关于#define的小问题
#define LIST_ENTRY(ptr, type, member) \ ((type *) ((char *) (ptr) - (unsigned long) (&((type *) 0)->member))) ~~~~ 什么意思? 程序中的使用: p = LIST_ENTRY(pos, UdpSession, listItem); 我想知道define中的0是什么意思,大家帮我看看,谢谢了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pcboyxhy
2005-03-10
打赏
举报
回复
(unsigned long) (&((type *) 0)->member)
取得 type类型中的成员member在内存中相当于type的位移量。
struct foo
{
int i;
char f;
};
(unsigned long) (&((foo *) 0)->f)
取得 f在结构中的内存位移量(f相对于结构起始地址的距离)
深入了解#
define
以及关于#
define
语句后面加分号的
问题
本文探讨了C语言中#
define
宏定义的使用,指出#
define
后面可以加分号,但可能导致多条语句的
问题
。通过示例解释了不加分号的推荐做法,以避免潜在的语法错误。内容涵盖了宏定义的基本原理和注意事项。
Qt #
define
宏定义相关
问题
避坑
本文围绕Qt中#
define
宏定义展开,介绍了其是C和C++预处理指令,用于定义常量等。重点阐述了使用#
define
宏定义时的避坑要点,包括命名
问题
,避免与已有宏重名;不利于调试,应使宏定义简单;带参数的宏使用运算符等会导致未知结果或编译失败。
typedef 与 #
define
的
问题
文章讲述了在C语言中typedef和#
define
两种定义数据类型方法的不同,指出typedef在处理指针时更安全,因为它不会导致意外的token粘连
问题
,如在#
define
的例子中定义pStr2后,s4被错误地定义为char而非char指针。typedef是为类型创建别名,而#
define
进行文本替换,因此在复杂情况下typedef更优。
#
define
定义数据溢出的
问题
本文探讨了在使用合泰单片机进行定时器设置时遇到的数据溢出
问题
,通过调整数据类型从int到unsigned long解决了计数溢出的错误,并对比了不同#
define
表达式的正确性和潜在
问题
。
C++ #
define
宏定义
问题
及解答
本文深入解析C语言中宏定义#
define
的使用方法,包括基本用法、常见
问题
及解决方案,探讨宏替换规则与程序效率提升。同时介绍特殊符号#、##、#@的应用,以及实用的宏定义案例。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章