最近言語ごと特徴などについて学びなおしています。
様々な言語への理解が進んでいくことにより、今後何かしら開発をする際に必要になる可能性を考え学ぼうと思います。
【初心者】C言語とは
1. そもそもCって何?
C言語とは汎用性が高く、高速で高度な処理が可能となっているプログラミング言語です。
こちらは機械語の様に人間に理解しにくい低級言語ではなく、人間が理解しやすい高級言語で処理が可能なプログラムを作成できます。
C言語は1972年にAT&Tベル研究所で開発され、その後UNIXオペレーティングシステムの開発の使用されて広く普及しました。
また、低レベルの機能も使用可能となっているので、システムプログラミングや組み込みシステムなどに使用されています。
C言語は開発されて以降様々なプログラミングの基礎となっており、基幹システムなどはCなどで開発をされています。
C言語は汎用プログラミング言語に分類されており、特定の用途やハードに限定されない開発を行うことができます。
C言語はPCや家電・自動車など組み込み開発などや、スーパーコンピュータのような多様なハードにも使用されています。
2. C言語とC++/C#など派生言語との違い
C言語を元にして機能を拡張したC++やC#という言語があります。
C言語とそれぞれ派生した言語との違いについて以下に簡単にまとめます。
■C言語とC++
C++はC言語を元に機能を拡張したプログラミングげんととなっており、オブジェクト指向のプログラミング機能を追加されています。
オブジェクト指向のプログラミングの機能と概念を追加されてことにより、大規模開発に対応することができ、カプセル化や継承や多態性などといった、オブジェクト指向プログラミングの機能をサポートできるようになりました。
また、C言語では対応できていなかった例外処理などの機能も追加されました。
■C言語とC#
C#はマイクロソフトが開発したプログラム言語となっており、.NET Frameworkをサポートしているので、Webアプリケーション開発やWindowsアプリケーション開発などの開発をすることができます。
C#はC++と同じようにオブジェクト指向のプログラミングの機能を持っており、Javaと同じようにガーベージコレクションやマルチプラットフォーム対応のプログラミング言語となっています。
C言語やC++の派生の様に説明をしましたが、C#はC言語よりではなくJavaに似た言語となっています。
3. C言語のメリットとデメリット
C言語には習得難易度が高い分他の言語よりも様々なメリットがあります。
上記のメリットに加えてデメリットについても以下にまとめます。
3-1. C言語のメリット
■実行速度が早い
C言語で開発すると、実行速度が速いシステムやアプリを作成することができます。
C言語はソースコードを実行時に一括で変更するコンパイル型の言語ですので、後述するインタプリタ言語と違い実行速度が速くなっています。
プログラムは実行時に人間が理解できる高級言語から、機械が理解できる低級言語に翻訳しなければなりません。
その際に、プログラムを機械語に一括で変換するコンパイル型の言語と、1行ずつプログラムを機械語に変換するインタプリタ型の言語に分かれています。
一般的には1行ずつ処理するよりも、一括でまとめて処理する方が速くなります。
ですので、インタプリタ言語よりもC言語のようなコンパイル型の方が速くなります。
■細かい制御を記述できる
C言語はハードウェアの制御など組み込み開発によく使用されていますが、そういった制御のプログラムには必要なビット操作などの命令も記述しなければなりません。
そういった場合にC言語を使用することで、直接的なハードウェア制御をメモリ単位で細かく開発することができます。
そのため、機械側のシビアなタイミングでの処理要求や、マイコンなどの制御にも対応することができます。
■移植性が高いものを作成できる
C言語は異なるハードウェア上やOSでも起動できるプログラムを記述することができます。
C言語はANSIの標準規格にのっとって記述されたプログラムであれば、様々なハードウェアやOS上で動作が可能となっているので、既存の古いシステムから新規のシステムへのプログラム移植などが簡単に行えます。
また、C言語は最初期からある言語ですので、様々なノウハウが知識やノウハウが豊富になるので、移植する際にも問題の解決などを速く対応することができます。
3-2. C言語のデメリット
■学習コストが高い
C言語には他の言語にはない独自の概念があります。
その中で有名なものでポインタがよくあげられています。
ポインタはC言語の最大の特徴でもありますが、使い方が難しいため間違った際にプログラム異常が出てしまう原因にもなります。
ポインタを理解して使用することができれば、より細かい制御のプログラムを記述することができます。
また、C言語の理解の難しい点についてポインタが最大の要因となっていますが、もう一つコードの記述が他の言語よりも多くなっています。
他言語で1行で表せる処理をC言語で記述した場合には、同じ処理を追加するにしても数行記述する必要があります。
ですので、C言語の様に複数行記述が必要な場合は、その行に記述されているプログラムの意味を理解する必要があります。
そうなると、その分他の言語よりも記述に対して覚えることが増えてしまうので、C言語は他の言語と比較すると学習コストが高くなってしまいます。
コードの記述が多くなり複雑なプログラムになってしまうと、プログラムにエラーがあった場合に場所の特定が難しくなってしまいます。
■拡張性や再利用性が低い
C言語はオブジェクト指向の言語ではないので、オブジェクト指向の言語と比較するとプログラムの拡張性や再利用性が劣ってしまいます。
オブジェクト指向は処理とデータを一つのオブジェクトとして扱える言語となっており、プログラムの再利用性や拡張性がオブジェクト単位で効率よく作業を行えます。
■開発するソフトウェアによっては開発効率が悪い
C言語は細かな制御をメモリ単位で管理することができます。
ですので、Web開発のようなメモリの制御など必要ない開発においては、C言語ですと開発の効率が落ちてしまう場合があります。
4. C言語が使用される開発
C言語を身につけてどのような開発ができるのか、C言語が利用される分野や業界について以下に紹介します。
■組み込みソフトウェア
C言語はポインタでメモリにアクセスして、細かい制御の記述を行うことができます。
処理を細かく制御できるおかげで、システムの処理速度が速く最小限のシステムで製品を開発することができます。
■ソフトウェア
C言語は処理能力も高く汎用性が高いので、ソフトウェア開発にも使用できます。
C言語はデータベースなどの管理システムのような、ITにおいて重要な役割のソフトウェア開発を行うことができます。
5. まとめ
C言語は自分は使う機会が少ないかと思いますが、言語の理解という面で自己学習を進めていきたいと思います。