dポイントプレゼントキャンペーン実施中!

構造体のメンバーをヘッダーファイル中で得たい場合、
以下のような方法以外になにか方法はないでしょうか?

単純に
XXXX x;と宣言してそれを
sizeof(x.chwk)と
使うというような方法以外で
なにかあれば教えてください。

----------------------------------------
typedef struct {
char chwk[100];
} XXXX;

typedef struct {
char chwk[ sizeof(( (XXXX*)0)->chwk ) ];
} YYYY;

main(int arc, char *arg[] ){
YYYY y;
printf( " YYYY chwk size = %d\n", sizeof(y.chwk));
}

A 回答 (4件)

う~ん・・・


質問者さんの方法をマクロ関数にした#1さんの方法がベストじゃないかなぁと思います。
offsetof マクロの実装でも NULL ポインタはよく利用されていますしね。

ちなみに、C++でなら通ってもよさそうな sizeof(XXXX::chwk) でもダメみたいですね。
まぁ、クラス変数ではないのだから、当然かも知れませんが。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
>offsetof マクロの実装でも NULL ポインタはよく利用されていますしね。
そうでしたか。
私は不勉強で初めて知りました。
>C++でなら通ってもよさそうな sizeof(XXXX::chwk) でもダメみたいですね。
そうみたいですね。
ありがとうございました。

お礼日時:2007/07/19 11:07

意味もなく「100」という数値がこんなところに出てくるのがそもそもおかしいです.


普通は記号定数として #define されているはずなので, それを使うのが普通でしょう.
結果的には #4 と同じですが.
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ご指摘ごもっともです。

わざわざこんな書き方をしたのは#4 の「お礼」の通りです

お礼日時:2007/07/18 16:29

>構造体のメンバーの静的なサイズ


静的なんですよね?わざわざ、
typedef struct {
char chwk[100];
} XXXX;
typedef struct {
char chwk[ sizeof(( (XXXX*)0)->chwk ) ];
} YYYY;
こんなことしなくても、
今回提示されたコードの場合なら

#define MAXCHWKLEN (100)
または、
const int MAXCHWKLEN = 100;

typedef struct {
char chwk[MAXCHWKLEN];
} XXXX;
typedef struct {
char chwk[MAXCHWKLEN];
} YYYY;
でいいのではないでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ご指摘ごもっともです。

説明が重複しますが、DEFINEとか使う以外に単純に
メンバーのサイズを求める方法が知りたかったものですから。

お礼日時:2007/07/18 16:26

そのソースの中にも書かれている sizeof(((XXXX*)0)->chwk) をマクロ化して,



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

MemberSizeOf(XXXX, chwk) ではご不満ですか?

参考URL:http://www5d.biglobe.ne.jp/~noocyte/Programming/ …

この回答への補足

やはりこの方法になりそうですね。
ありがとうございました。

補足日時:2007/07/19 11:04
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
実体にNULLを使うところが自分で納得いかなくて
でもDEFINEとか使う以外に単純に
メンバーのサイズを求める方法が知りたかったものですから。

お礼日時:2007/07/18 16:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!