gpt4 book ai didi

c - C 中单个结构成员的大小

转载 作者:太空狗 更新时间:2023-10-29 16:14:51 27 4
gpt4 key购买 nike

我正在尝试声明一个依赖于另一个结构的结构。我想使用 sizeof 来安全/迂腐。

typedef struct _parent
{
float calc ;
char text[255] ;
int used ;
} parent_t ;

现在我想声明一个与 parent_t.text 具有相同大小的结构 child_t

我该怎么做? (下面的伪代码。)

typedef struct _child
{
char flag ;
char text[sizeof(parent_t.text)] ;
int used ;
} child_t ;

我用 parent_tstruct _parent 尝试了几种不同的方法,但我的编译器不接受。

作为一个技巧,这似乎有效:

parent_t* dummy ;
typedef struct _child
{
char flag ;
char text[sizeof(dummy->text)] ;
int used ;
} child_t ;

是否可以在不使用 dummy 的情况下声明 child_t

最佳答案

虽然使用 #define 定义缓冲区大小是一种惯用的方法,但另一种方法是使用这样的宏:

#define member_size(type, member) sizeof(((type *)0)->member)

并像这样使用它:

typedef struct
{
float calc;
char text[255];
int used;
} Parent;

typedef struct
{
char flag;
char text[member_size(Parent, text)];
int used;
} Child;

sizeof(((type *)0)->member) 甚至允许作为常量表达式,这让我感到有些惊讶。很酷的东西。

关于c - C 中单个结构成员的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3553296/

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