sizeof single struct member in C
c, sizeof, struct
Solution
Although defining the buffer size with a `#define` is one idiomatic way to do it, another would be to use a macro like this:
#define member_size(type, member) (sizeof( ((type *)0)->member ))
and use it like this:
typedef struct
{
float calc;
char text[255];
int used;
} Parent;
typedef struct
{
char flag;
char text[member_size(Parent, text)];
int used;
} Child;
I'm actually a bit surprised that `sizeof(((type *)0)->member)` is even allowed as a constant expression. Cool stuff.
Problem
I am trying to declare a struct that is dependent upon another struct. I want to use `sizeof` to be safe/pedantic. ``` typedef struct _parent { float calc ; char text[255] ; int used ; } parent_t ; ``` Now I want to declare a struct `child_t` that has the same size as `parent_t.text`. How can I do this? (Pseudo-code below.) ``` typedef struct _child { char flag ; char text[sizeof(parent_t.text)] ; int used ; } child_t ; ``` I tried a few different ways with `parent_t` and `struct _parent`, but my compiler will not accept. As a trick, this seems to work: ``` parent_t* dummy ; typedef struct _child { char flag ; char text[sizeof(dummy->text)] ; int used ; } child_t ; ``` Is it possible to declare `child_t` without the use of `dummy`?