C言語及びC++の標準準拠は難しい?

注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。

C言語やC++の標準規格は順次バージョンアップされており、2016年現在ではC言語はC11、C++ではC++14が最新の標準規格となっているが、それらに準拠したコンパイラーは数を数えるほどしかない。ここではC++の準拠状況を見ながら私論を述べてみたい。

C++については、その言語仕様の巨大さかつ複雑さから、標準に準拠したコンパイラーを開発するのはとてつもなく難しいものと言える。C++は特に新しい機能が追加される傾向にあり ((例えばテンプレートやそれを使ったSTLなど)) 、難解さや複雑さは増えていくものであるからである。

まず、C++11については、最新版のメジャーなコンパイラー(Visual C++、GCC、Clang、Intel C++ Compilerなど)ではほぼ準拠しているが、全機能実装を果たしたのはClang(2013年)が最初とのことである。C++14についても、Clangが真っ先に全機能実装、GCCも一部を除いて実装とのことである。それ以外は一部機能実装済みとのことである。

C++は言うまでもないが、C言語についても、移植性が高いと言われているが、実際には処理系依存の部分がかなり多く、標準に準拠したとしてもGCCやVisual C++、Clangなどでそれぞれ独自の拡張が行われており、それらを使った場合は他の処理系ではコンパイルできないといった問題もある。

実際の開発ではどのプラットフォームをターゲットにするのか、仮に複数のコンパイラーでコンパイルされることが想定される場合はコンパイラー依存のコードは書かないこと、標準に準拠してもどの処理系で問題が発生するのかは気をつけなければならないのだろうか。

タイトルとURLをコピーしました