社区
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是什么意思,大家帮我看看,谢谢了
...全文
78
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
语句后面加分号的
问题
#
define
的详解,以及结尾语句的
问题
,一篇让你搞懂#
define
!
Qt #
define
宏定义相关
问题
避坑
Qt宏定义避坑指南:使用#
define
宏定义时需注意命名冲突(避免与系统/第三方库宏重名)、调试困难(复杂表达式展开不可见)及参数宏的风险(避免使用自增运算符)。建议优先使用const/enum替代常量,复杂逻辑改用内联函数。带参宏需严格遵循语法规范(无空格、慎用运算符)。文章还对比了#pragma once与#ifndef的优劣,并提供了编译器预定义宏的查看方法。
typedef 与 #
define
的
问题
本文主要记录日常学习C/C++过程中遇到的一些有趣的知识点,包括C++ Primer中经典的案例会摘录出来供大家学习。
#
define
定义数据溢出的
问题
使用合泰单片机做一个小东西,使用 #
define
TIMER_COUNT (30*60*1000) 时,发现结果老是不对,后来想想,是不是数据溢出了,一查果然是这样。看来是stm32用多了,总以为#
define
是默认32位数据类型的。改成 #
define
TIMER_COUNT (unsigned long)(30*60*1000) 后结果就正常了。随便想纠正下网上很多帖子...
C++ #
define
宏定义
问题
及解答
一、#
define
的基本用法 #
define
是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利。 1 #
define
命令剖析 1.1 #
define
的...
C++ 语言
65,214
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章