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`?

Original source