別の構造体に依存する構造体を宣言しようとしています。sizeof
安全かつ慎重に使用したいと思います。
typedef struct _parent
{
float calc ;
char text[255] ;
int used ;
} parent_t ;
child_t
ここで、と同じサイズの構造体を宣言したいと思いますparent_t.text
。
どうすればこれを実行できますか? (以下に疑似コードを示します。)
typedef struct _child
{
char flag ;
char text[sizeof(parent_t.text)] ;
int used ;
} child_t ;
parent_t
とを使用していくつかの異なる方法を試しましたstruct _parent
が、コンパイラが受け入れません。
トリックとしては、これが機能するようです:
parent_t* dummy ;
typedef struct _child
{
char flag ;
char text[sizeof(dummy->text)] ;
int used ;
} child_t ;
child_t
を使用せずに申告することは可能ですかdummy
?
ベストアンサー1
バッファ サイズを を使用して定義するのは#define
慣用的な方法の 1 つですが、次のようなマクロを使用する方法もあります。
#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)
実際、それが定数式として許可されていることに少し驚いています。すばらしいですね。