3
以下のコードは有効ですか?別の構造体にフレキシブルな配列メンバーを持つ構造体
struct foo {
int a;
int b[];
};
struct bar {
int c;
struct foo d;
};
struct bar *x = malloc(sizeof(struct bar) + sizeof(int [128]));
私にはOKと思われるが、私がしなければ、コンパイラは文句はありませんので、私は少し懐疑的:
struct bar {
struct foo d;
int c;
};
@Shahbaz:いいえ、 'intはB []' * * * int型 'と同じではありませんb。この構造体は、*フレキシブルな配列メンバー*と呼ばれます。 http://www.c-faq.com/struct/structhack.html – jamesdlin
@jamesdlinは、それを知らなかった!しかし、それは恐ろしいアイデアのように思えます。どのように彼らはそれを標準にすることができますか? – Shahbaz
@Shahbazそれはひどい考えではありません、人々が間違ってそれを使用する場合、それはちょうど危険です。それが標準になる前にその目的のために 'struct'の最後のメンバーとして長さ1の配列を持つのは普通のハックでした。 gccは長さ0の配列を柔軟な配列メンバーとして長年受け入れていました。 –