http://www.play21.jp/board/formz.cgi?ac ... q&rln=1338
のスレで話題になっていた情報の詳細が別所で議論されていましたので紹介しておきます。
http://forums.belution.com/ja/cpp/000/063/47s.shtml
どうやらC89では未定義だったものがC99で採用されていたみたいです。
【雑談】フレキシブル配列メンバ
Re:【雑談】フレキシブル配列メンバ
むかし出てきたことがありましたが、
(名前は特に無かったと思う)
ANSI 規格では明記されていませんでしたが、
FAQの様な、いろんな情報が、ANSI C89 制定後に、ANSI より出て来ている筈ですが、
そこで、このように使えるというサンプルが出たことがあるそうです。
ということで、後付ですが、ANSI C89 の定義の範囲内だったはずです。
サンプルは、
struct foo {
struct foo *next;
char str[1];
}
の、str に文字列を入れる様なかきかただったはず。
当然ですが、サイズ 0 のメンバはANSI は認めていないので、
gcc の str[0] や、bcc,cl などの str[/url] 形式は ANSI は認めていなかったはず。
今の C99 はどうかな?
ついでに、この手法は、ANSI 以前からあった方法だったと記憶しています。
MSC4 などのヘッダファイルの中にも有った様な気が・・・
(名前は特に無かったと思う)
ANSI 規格では明記されていませんでしたが、
FAQの様な、いろんな情報が、ANSI C89 制定後に、ANSI より出て来ている筈ですが、
そこで、このように使えるというサンプルが出たことがあるそうです。
ということで、後付ですが、ANSI C89 の定義の範囲内だったはずです。
サンプルは、
struct foo {
struct foo *next;
char str[1];
}
の、str に文字列を入れる様なかきかただったはず。
当然ですが、サイズ 0 のメンバはANSI は認めていないので、
gcc の str[0] や、bcc,cl などの str[/url] 形式は ANSI は認めていなかったはず。
今の C99 はどうかな?
ついでに、この手法は、ANSI 以前からあった方法だったと記憶しています。
MSC4 などのヘッダファイルの中にも有った様な気が・・・
Re:【雑談】フレキシブル配列メンバ
Hermitさん、さらに突っ込んだ情報ありがとうございます。
>ということで、後付ですが、ANSI C89 の定義の範囲内だったはずです。
そうでしたか。C89の範疇に入っていたのですか。
>gcc の str[0] や、bcc,cl などの str[/url] 形式は ANSI は認めていなかったはず。
>今の C99 はどうかな?
JISX3010:2003(ISO/IEC9899:1999)を確認しましたが、特記事項として書いてありませんでした。
>ということで、後付ですが、ANSI C89 の定義の範囲内だったはずです。
そうでしたか。C89の範疇に入っていたのですか。
>gcc の str[0] や、bcc,cl などの str[/url] 形式は ANSI は認めていなかったはず。
>今の C99 はどうかな?
JISX3010:2003(ISO/IEC9899:1999)を確認しましたが、特記事項として書いてありませんでした。