テスト追加修正windowsで動くCコンパイラの機能(kr,c90,c99,c11,vc・gcc拡張)の実装具合を比較してみた。試してみたソースはこちら。VC以外はフリー配布のコンパイラを使用(vcも無料なexpress版あり)。フリーかつwindows版で今配布されているもので、そのコンパイラの最新とは限らない。有効にするオプションを指定、している。c++機能をなるべくonにする設定にしている。有効にするオプションを指定している。fail[c](コンパイル失敗)。support、その他項目に合わせた文字列、のようにしている。非互換のある機能については表では別枠にしている。(そういう意味では結果2が主目的。↑[c基本機能]凍結old-c(kr-c)のころから変わらない機能と思われるもの。old-cを使っていた時代に見聞きしたコンパイラによってはサポートされてない機能の確認を用意してみた。持ち合わせがないのであまり意味がなかったが。違う結果になってしまったことだろうか。なっていて単純に生成ミスのようだ。Uの情報がどこかで欠落したようにみえる。チェックしてるだろうで、バグに気づく前に回避されてることが多そうには思う。64bitの10進数16進整数リテラルが使えていた、ため試してみたのだが、他のコンパイラでもわりと――少なくとも16進数表記であれば結構サポートされているようだ。実装を思えば16進対応は(コンパイラ)実行時のコスト少ないので納得するが、10進16進で違う選択をするとは思っていなかったので少しびっくりだった。古くからのコンパイラのようなのでその名残なのだろうか。第二版」付録C変更点の要約、をみながらテストを用意。これらも概ね、パスする状態。signed(intptr_t)にならないコンパイラがいくつかあった。定義するのがよくないような気もする。新機能」のサイトの頁をみてテストを作成。(ドラフトをベースにしてるようなことを書かれていて、実際のコンパイラのサポート具合をみると、多少ドラフトから変わったのかなと思えることもある)c99以降はコンパイラの対応が結構ばらばらになる。対応を謳う中でも対応具合に幅あるし、で。古いコンパイラ以外はサポートしてそうだ(1993年製のlsic86v330はさすがに未サポート)。余分な,も簡単な対応だろうでみな大丈夫だし。ネイティブでそうなってると思う。可変引数マクロもここ10年くらいのコンパイラならそこそこサポートしてるようだ。意外にばらついている印象。プリプロセッサ関係では、2引数以上のマクロでの空引数対応はc99以前のコンパイラ以外はわりと対応しているようだが、1引数マクロでの空引数の扱いはまちまち。これはどちらがいいとも言い難いが1引数マクロの引数指定忘れを検出できるほうが個人的にはありがたい。扱いが仕様通りでないコンパイラもあるが、これは通常の書き方では避けるべきものとして普通は回避されていることが多そうだろう。よる型値リテラル、c++のような文後の変数定義、c++互換のforの第一引数の変数宣言。