C++

C言語との互換性

C++は基本的にC言語の上位互換であるが、厳密には異なる(※http://public.research.att.com/~bs/bs_faq.html#C-is-subsetBjarne Stroustrup's FAQ - Is C a subset of C++?2008-01-18)。C言語で記述された大半のプログラムはC++でコンパイルできるように簡単に修正できるが、C言語では正当でもC++では不正になる部分や、C++とは動作が異なる部分が若干存在する。例えば、C言語では汎用ポインタ( void* )は他のポインタに暗黙で変換できるが、C++では変換を明示する必要がある。またC++では newclass といった数多くの新しいキーワードが追加されたが、移植の際に元のC言語のプログラムでそれらが識別子(例えば変数名)として使われていると、問題になる。最新のC言語の標準規格であるC99ではこうした非互換性の一部が解決されており、//形式のコメントや宣言とコードの混在といったC++の機能がC言語でサポートされている。その一方でC99は、可変長配列、複素数型の組み込み変数、指示初期化子、複合リテラルといった、C++でサポートしていない数多くの新機能が追加されている(※http://home.datacomm.ch/t_wolf/tw/c/c9x_changes.htmlC9X -- The New C Standard27 December 2008)。しかしながらC99で追加された新機能の一部はC++の次期バージョンであるC++0xに含まれる見込みである。C言語のコードとC++のコードを混在させるためにはCリンケージを利用する必要があり、関数をextern "C" { ... }のブロックの中で宣言しなければならない。Cリンケージを利用した関数については、C++名前修飾がされず、名前修飾に依存している関数オーバーロード機能は利用できない。

戻る