【发布时间】:2013-06-20 15:26:20
【问题描述】:
我试图在编译期间输出结构成员的偏移量。我需要知道偏移量,稍后我想添加一个#error 以确保成员保持相同的偏移量。 我已经在 VS 中看到了几种工作方法,但我使用的是 GCC,但它们不能正常工作。
谢谢!
【问题讨论】:
-
你应该不需要这个。你想达到什么目的?
-
这是一个相当大的项目,其中一些是用汇编编写的,如果人们更改成员的位置,我需要让他们更难在脚上开枪,因为偏移量是硬编码的在汇编代码中。如果您知道一种从汇编代码中找到结构偏移量的方法,那可能是另一种解决方案 - 我的意思是在汇编代码中自动使用偏移量
-
我不知道在编译时执行此操作的解决方案。但是,您可以输入几个
assert(offsetof(struct foo, some_member) == 12)。 -
@H2CO3:我看到了有效的用例:例如,确保外部 API 保持向后兼容......如果您检查像 ffmpeg 这样的项目,除非它是主要版本号更改,否则您不允许将成员添加到结构的中间(但您可以添加到末尾,因为这不会破坏任何内容)。
-
可以使用 C11 静态断言吗?