gpt4 book ai didi

C: 做 sizeof(((SomeStruct *) 0)->some_member) 的更好方法?

转载 作者:太空宇宙 更新时间:2023-11-04 00:14:51 26 4
gpt4 key购买 nike

我想获取结构中特定成员的大小。

sizeof(((SomeStruct *) 0)->some_member) 对我有用,但我觉得可能有更好的方法。

我可以#define SIZEOF_ELEM(STRUCT, ELEM) sizeof(((STRUCT *) 0)->ELEM) 然后使用SIZEOF_ELEM(SomeStruct, some_member),但我想知道是否已经内置了更好的东西。

我的具体用例在 hsc2hs(Haskell C 绑定(bind))中。

pokeArray (plusPtr context (#offset AVFormatContext, filename)) .
take (#size ((AVFormatContext *) 0)->filename) .
(++ repeat '\NUL') $ filename

最佳答案

如果您不能保证有一个变量可以取消引用,那么您所获得的就差不多是干净的了。 (如果可以,那么只使用 sizeof(var.member)sizeof(ptr->member) ,当然,但这在某些需要编译时常量的上下文中不起作用。)

很久很久以前(大约 1990 年),我遇到了一个编译器,它有' offsetof ' 使用基地址 0 定义,它崩溃了。我通过破解 <stddef.h> 解决了这个问题使用 1024 而不是 0。但是你现在应该不会遇到这样的问题。

关于C: 做 sizeof(((SomeStruct *) 0)->some_member) 的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1014750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com