我想获得结构中特定成员的大小.
sizeof(((SomeStruct *) 0)->some_member) 适合我,但我觉得可能有更好的方法来做到这一点.
我可以#define SIZEOF_ELEM(STRUCT, ELEM) sizeof(((STRUCT *) 0)->ELEM)然后使用SIZEOF_ELEM(SomeStruct, some_member),但我想知道是否已经有更好的内置功能.
我的具体用例是hsc2hs(Haskell C绑定).
pokeArray (plusPtr context (#offset AVFormatContext, filename)) .
take (#size ((AVFormatContext *) 0)->filename) .
(++ repeat '\NUL') $ filename
Run Code Online (Sandbox Code Playgroud)
如果你不能保证你有一个变量来解除引用,那么你得到的就是干净利落.(如果可以,那么使用just sizeof(var.member)或者sizeof(ptr->member)当然,但是在需要编译时常量的某些上下文中这不起作用.)
很久很久以前(大约1990年),我遇到了一个offsetof使用基地址0定义的编译器,它崩溃了.我通过黑客攻击<stddef.h>使用1024而不是0来解决这个问题.但是你现在不应该遇到这样的问题.