C言語とC++って名前似てるけど、何か関係あるの?
C言語とC++の違いは?
JavaやC#との違いを知りたい!
名前が似ているので混同しがちなC言語とC++。
C言語の機能を拡張した言語がC++なので、似ていて当然です。
実際、C言語のコードはほとんどC++のコードとしてコンパイルできます。
この記事では、C言語とC++の違いを
- 作られた経緯
- 書き方・文法
- 機能
- 用途
の観点に切り分けることで、初心者の方でもわかりやすいように解説しています。
この記事を読めば、C言語とC++の違いを理解するとともに、C#・Java・VC++といった他の言語との違いも知ることができます。
似ているからこそ、相違点を知ることで言語の特徴を明快に理解しましょう。
- C言語の機能を拡張し、「オブジェクト指向」などの概念を追加した言語がC++
- C言語にある機能はほとんどC++で使える
- C++はC言語にはない「クラス」「テンプレート」「例外処理」といった機能をもつ
- C言語はOS開発や組み込み系、C++はアプリ・ゲーム開発や組み込み系によく使われる
- Javaとは「ポインタの有無」、C#とは「活用される分野」で大きな違いがある
C言語とC++の特徴
C言語とC++の違いについて知る前に、まずはそれぞれの言語の特徴をざっと理解しましょう。
基本的に、C言語にある機能はC++にも備わっていると考えてもらって差し支えありません。
C言語の特徴【多くの電子機器に使用されている歴史の長い言語】
1972年に開発された、歴史の長い言語です。
ソースコードを「コンパイル」し、コンピュータが理解できる形式(機械語)にする必要があります。
2018年にもアップデートがありましたが、バグ修正がメインで、新たな機能はあまり追加されていません。
C言語は機械語に近いので、処理速度が早いです。
機械語に近い分、コンピュータの内部をいじりやすいので、よく理解していない人が使うと「危険」なプログラムになってしまうことがあります。
C++の特徴【C言語を拡張して作られた難解な言語】
C言語の特徴を継承しつつ、機能性を向上させるため、開発された言語です。
C++はC言語同様、コンパイル型言語で、機械語に近いため処理速度が高速です。
現在でも新たな機能が追加され続けており、歴史も長いため、相当複雑な言語になってきています。
作られた経緯の違い
C言語はUNIXをほかのコンピュータに移植するために作られた
C言語が作られる以前、UNIXというOSはアセンブリ語で記述されていました。
アセンブリ語のままでは、他のコンピュータへUNIXを移植するのが困難でした。
少しでも簡単に移植できるようにするために、B言語という言語が作られました。
「B言語」は実行速度が遅かったため「C言語」に改良され、現在でも利用されています。
C++はC言語の機能性を向上するために作られた
C++はC言語の開発効率を上げるために開発された言語です。
C言語に「オブジェクト指向」の概念を導入しました。
オブジェクト指向について詳しく知りたい方は、下のYouTube動画がおすすめです。
書き方・文法、コンパイラの違い【CでできることはC++でもできる】
C言語の文法は基本的にC++でも使えます。
つまり、C言語のコードはC++のコードとしてコンパイルできます。
逆にC++のコードをC言語のコードとしてコンパイルはできません。
機能・性質の違い【C++はオブジェクト指向】
C++になくてC言語にのみある機能は、ほとんどありません。
「キャスト」についてはC言語独自の”危険”な方法があるのですが、実用性が乏しいため、ここでは割愛します。
ですので、ここで紹介する違いは「C++にあってC言語にない」機能の解説となります。
クラス
C言語に”class”はありませんが、C++にはあります。
C++は昔「C with Classes」と呼ばれていたことからも、”class”の概念が特徴的であることがわかりますね。
C言語には”class”と似た”struct”という機能があります。
ほとんどclassと同じで、デフォルトのアクセシビリティが”private”か”public”か、という点が違うだけです。
関数のオーバーロード
関数のオーバーロードとは、引数が異なる同名の関数を複数定義することです。
C++にのみある機能です。
C言語では同じ名前の関数を定義できませんが、C++では引数の型や個数を変えることで実現できます。
継承
C++には「継承」という機能があります。
継承とは、既存のclassの機能を再利用して新しいclassを定義することです。
オブジェクト指向の重要な概念の1つです。
同じようなclassを定義したいとき、「継承」することで、コードの分量を少なくできます。
テンプレート
C++は、C言語にない「テンプレート」という機能を持っています。
型が何であっても、演算子が同じであれば、関数やクラスを使えるようになりました。
このような概念はジェネリックプログラミングといいいます。
例外処理
C++ではtry・catch構文を用いて、例外処理を実現できます。
C言語では多くの場合、関数内でのエラーは戻り値に特定の値をセットすることで検知していました。
しかし戻り値は受け取らないこともできるため、エラーを無視してしまい、より重大なエラーにつながる恐れがありました。
C++では”try”でエラーを検知し、”catch”でエラーを検知した時の処理を記述します。
try・catchのおかげでエラーを見落とすことを減らせます。
用途の違い
C言語で書かれた既存資産を改良するときにC言語はよく使われる
C言語は50年の歴史をもつため、C言語で記述された既存資産が蓄積されています。
実際、Linuxや組み込みソフトほぼC言語で書かれています。
既存資産のノウハウを生かして作るほうが楽なため、今でもC言語は多くの人に使われているというわけです。
C++は組み込み系やアプリ・ゲーム開発によく使用される
C++は組み込み系ソフトや、アプリ・ゲーム開発など幅広く使われています。
C++は実行速度が早く、実行ファイルが小さいので、限られたリソースで機能させる必要がある組み込み系には打ってつけです。
また、ゲームは重くなりがちなので、C++を使うことで高速かつ軽量なゲームを実現しています。
Java、C#との違いは?VC++とは?
Javaとの違い
JavaはC++同様「オブジェクト指向」ですが、C言語やC++を大きく継承した言語ではないため、文法は異なります。
言語機能の面では、「ポインタの有無」が重要な違いの1つです。
C言語・C++ではポインタを使ってメモリを直接操作していたのですが、Javaでは操作できなくなりました。
Webシステムやアプリ開発など、大規模開発によく用いられる言語で、求人数は今でも多いです。
C#との違い
C#は「C++」と「Java」をもとにして作られた言語です。
文法はC言語・C++と似ていますが、C#はC言語との互換性はありません。
C#はUnityを用いたゲーム開発、Windowsアプリの開発などで広く用いられています。
VC++との違い
VC++はプログラミング言語ではなく、Visual Studioに含まれる統合開発環境(IDE)のことです。
統合開発環境とは、プログラミングに必要な開発環境が一式そろえられた環境のことです。
VC++を用いれば、C++をネイティブコードにコンパイルすることができ、高速実行できます。