【发布时间】:2014-01-26 20:55:32
【问题描述】:
我发现我在调试时花费了大量时间来尝试确定结构的成员偏移量。我想知道是否有一种快速方法可以在编译时确定大型结构中成员的偏移量。 (注意:我知道几种创建偏移量在给定范围内的编译时断言的方法,我可以对正确的值进行二进制搜索,但我正在寻找更有效的方法)。我正在使用 gcc 的最新版本来编译 C 代码。
【问题讨论】:
-
宏
offsetof(structure, fieldname)没有帮助? -
@MarianV 为什么不回答这个问题(也许有一个使用示例)?
-
@eric_finn 好的。我不确定它是否在编译时有效。
-
“在编译时”是什么意思?编译器需要能够确定
offsetof导致常量表达式(例如,您可以将其用于静态存储数组的大小);这是您可以获得的“在编译时”的正式定义最接近的东西。唯一可能的其他含义是“可用于预处理器#if条件;这当然不适用于offsetof,因为预处理器不了解结构。 -
嗯,也许我没有像我想象的那样解释这一点...我正在寻找一种确定偏移量的方法而不实际运行代码。加载和运行系统需要很长时间,而且我经常无法访问我正在调试的系统。我尝试像这样声明一个数组:
char dbg[0-sizeof(offsetof(x,y)];,这会导致编译失败,但不会打印出实际的偏移量。我不确定我要问的是否可能,但我想我会把它扔在那里以防万一。