C言語における単一構造体メンバーのサイズ 質問する

C言語における単一構造体メンバーのサイズ 質問する

別の構造体に依存する構造体を宣言しようとしています。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)実際、それが定数式として許可されていることに少し驚いています。すばらしいですね。

おすすめ記事