12/08/28 05:12:56.58
>>587
ありがとうございます。
以下のような構造体を作ることは可能なのでしょうか?
可変長の部分は結局ポインタで繋げることになるのでしょうか?
構造体1
|=DWORD aa;
|-int bb;
|-構造体2[bb]
||-int count;
|\-DWORD aaa;
\-構造体3[bb]
|-char foobar[0][50];
|-char foobar[1][50];
\-char foobar[2][50];
589:デフォルトの名無しさん
12/08/28 05:27:50.84
>>588
>可変長の部分は結局ポインタで繋げることになるのでしょうか?
そうなるね
typedef struct {
int attr;
int num;
int items[ ];
} info_t;
info_t *info = malloc(sizeof(info_t) + sizeof(int) * num);
info->num = num;
構造体の最後のメンバである時に限って0長配列メンバは可能だけど
これは全メンバのアドレスが決まっているから可能
590:デフォルトの名無しさん
12/08/28 06:12:13.24
>>589
0長配列が使える様になったのは何時ごろからか知ってる?
昔、Xlib とかの構造体では items[1] とかやってて面倒だった記憶が有るんだけど
591:デフォルトの名無しさん
12/08/28 06:41:31.08
>>590
規格としてはC99からっぽい
URLリンク(seclan.dll.jp)
MS-C ver.6から使えたが、ANSI準拠ではないので大っぴらには使ってなかったようだ
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;