CとC++の違い

あいかわらず「c c++ 違い」といったキーワードで検索してこられる方が多いようです。これまでにも何度かこの話題を取り上げてきましたが、すでに古くなってしまった記事もありますので、今回、改めてまとめておくことにします。

CとC++の違いについて話をする場合、どういう観点での違いなのかを、まずは明確にしなければなりません。ここでは、プログラミングを行う上での技術的な違い、用途の違い、そして、一方の言語を操るプログラマが他方のプログラマとしてどれほど通用するかについて書くことにします。それぞれの話が誰を対象にしているかはお分かりかと思います。

プログラミングを行う上での技術的な違い

Cは、高級アセンブラといわれるぐらい、ハードウェア寄りの記述を行うためのシンプルな言語です。Cを使って(必ずしもハードウェア寄りではない)アプリケーションの開発も可能ですが、開発効率は必ずしも高くありません。しかし、手間はかかったとしても、できないことはほとんどありませんし、できあがったプログラムも、小さく、速くなるのが普通です。

一方、C++は、Cをベースに、オブジェクト指向プログラミングを容易にするクラスや、ジェネリックプログラミングのためのテンプレート、例外処理などの機能を大幅に追加したものです。また、Cよりは厳密に型チェックが行われるなど、バグが発生しにくいように工夫されています。Cに比べれば開発効率は向上していますが、できあがったプログラムは、Cよりも、大きく、遅くなる傾向があります。

すでにCをよく知っているプログラマ向けには、拙著『組込み現場の「C++」プログラミング 明日から使える徹底入門』(技術評論社)で詳しく解説しました。逆に、すでにC++をよく知っているプログラマ向けには、当サイトの「C++プログラマのためのC言語入門」が参考になるでしょう。

CとC++の用途の違い

CとC++の用途は、かなり重複しているのは確かですが、Cしか使えない、あるいはCのほうが好まれる状況というのはあります。逆にいえば、そうでなければC++が使われると考えてよいでしょう。

Cしか使えない状況というのは、C++コンパイラが提供されていないようなプラットフォームや、メモリ容量が少ないローエンドのプラットフォームなどが挙げられます。Cのほうが好まれる状況というのは、オペレーティングシステムやデバイスドライバのような、非常にハードウェア寄りの開発であるとか、高い移植性が要求されるような状況です。

CやC++より、他の言語のほうが好まれるという状況もあります。非常にハイエンドな環境であるとか、高い移植性を必要としないような状況では、もっと開発効率が高い言語が使われることが多いようです。また、4ビットマイコンや、プロセッサのアーキテクチャが向かないなどの理由で、CもC++も使えないようなプラットフォームも存在します。

一方の言語を操るプログラマが他方のプログラマとしてどれほど通用するか

一般的なCプログラマがC++を扱う場合、"ベターC"としてC++を使うようなプロジェクトであれば、それほど抵抗なく参加できるかと思います。あるいは、既存のクラスライブラリを使うだけのプログラマとしてなら、何とかなることでしょう。

逆に、一般的なC++プログラマがCを扱う場合、なぜCを使うのかにもよりますが、いろいろ戸惑うことが多いと思います。C++ではできたけれどもCではできないことが少なくありませんので、既存のライブラリを組み合わせることが中心の経験しか積んでいないC++プログラマでは太刀打ちできないことも少なくありません。

CとC++は、どちらか一方だけではなく、混在して使う機会も少なくありません。CができないC++プログラマの実力には限界があります。

この記事のトラックバックURL:

http://www.kijineko.co.jp/trackback/744