C, C++の標準とは?

良く、Visual C++は標準じゃないからとか、GCCは標準に準拠しているとか聞きます。標準とはいったい何なのかという話です。

C言語とC++は別の課程で標準化が行なわれております。そのため、分けて説明するのが適切です。また、標準化団体にも色々ありますが、国際標準であるISOを基準にして考えるのが普通でしょう。



まず、C言語の標準化は以下の経緯をたどります。

  1. K&R – (原点・標準ではない)
  2. C89 – ISO/IEC 9899:1990
  3. C95 – ISO/IEC 9899:1995/Amd 1:2002(C89追加改訂)
  4. C99 – ISO/IEC 9899:1999(C89改訂)

最新のC言語コンパイラはC95かC99をサポートしています。C99は変数を途中から宣言できたりするため、不便さはもう感じられません。また、ristrictなどの新しい予約語が追加されているため、C++よりも強力な一面もあります。C99までサポートしているのがGCCで、C95がVisual C++ 2005です(もっとも何処まで厳密かは不明)。

次にC++です。

  1. C with Classes – (原点・標準ではない)
  2. ISO/IEC 14882:1998
  3. ISO/IEC 14882:2003(1998年を改訂)

実は標準とよべるようなものがあまり存在しません。そのため、「ISO/IEC 14882:1998」のことを標準C++と呼んでいます。「標準C++」であるかどうかの見極めは、「.hの付かないヘッダ」や「namespaceのサポート」が存在することで判断できます。逆に<iostream.h>という形式のヘッダは標準C++のヘッダではありません。

説明が遠回りしましたが、要はコンパイラがISOが定義したように動作することを標準に準拠していると言うのです。例えばnewが失敗するとbad_allocを投げるとかいう、ルールをどれだけ守っているかが重要なわけです。

# Visual C++ はバージョン6.0においての準拠度合いが最悪な為、嫌なイメージを持たれましたが、今はまともなC++, Cコンパイラであると思います。

蛇足ですが、最近作られた「.NET Framework」に対応するC++は「ECMA C++/CLI 05」です。現在、Microsoftだけが標準だとか騒いでいる状態ですが、ISOにも提出されたらしく今後の展開が注目されます。

正しい知識を手に入れるためには、正しい標準を理解する必要があると考えます。規格書はISOに加盟した団体から手に入れることが出来ます。

しかしながら、元の文献は英語であるため、厳しい部分もあります。日本語化された文書が欲しいのならば、日本の標準であるJISから読む事をお勧めします。中身もほとんどISOと同一のはずです。

  • JIS X 3010:2003(C99)
  • JIS X 3014:2003(標準C++)

CやC++は良書が沢山あるため、必要性に迫られることはそうありませんが、参考程度に購入してみてはいかがでしょうか?



[ISO-JTC1/SC22/WG14] – C言語標準化団体

[ISO-JTC1/SC22/WG21] – C++言語標準化団体

[Bjarne Stroustrup’s HP] – C++作者のホームページ

Leave a Reply

Be the First to Comment!

Notify of
avatar
wpDiscuz