【サンプル有】C言語とは?特徴やできることなどを解説!
公開日:2019.11.15
スキルアップC言語は歴史が古く、プログラミング言語の中でも非常に知名度の高い言語の一つです。また、C系言語と呼ばれる派生言語の始祖でもあり、コンピュータを使用して行うことの大半はC言語で実行できるといわれるほど高い汎用性を持っています。プログラムの自由度が非常に高く、アプリの開発から機械制御まで幅広い分野で活用されている点が特徴です。
C言語はハードウェアの制御知識を必要とする面があるため、初心者にはハードルの高い言語ではありますが、その汎用性の高さからいまだ衰えない需要と人気があります。今回はC言語の概要や特徴、基礎知識とサンプルを解説していきます。
C言語とは?
C言語の歴史
C言語は、AT&Tベル研究所のケン・トンプソン氏が開発したB言語の改良として、同所のデニス・リッチー氏が主体となって開発した汎用プログラミング言語です。
UNIX(ユニックス)(コンピュータ用のマルチタスク・マルチユーザーのオペレーティングシステムの一種)の開発当初、OS上で動くユーティリティを作成するためのプログラミング言語としてB言語が開発されましたが、ソースコードを一つずつ解釈していくインタプリタ言語だったため、先に一括して解釈してしまうコンパイル言語と比較して動作が遅いなどの問題を抱えていました。C言語は、こうしたB言語の欠点を解消する目的で開発されました。
C言語の特徴
C言語の特徴は、現在主流となっているオブジェクト指向(モノの振る舞いをひとまとめにしていくプログラミング)という概念が登場する前の言語であり、手続き型(一連の計算処理をひとまとめにしていくプログラミング)の言語ということが挙げられます。
また、非常に古い言語であるため、仕様は単純ながら難解です。そのため、コンピュータにとってわかりやすい低水準言語(機械語(コンピュータが直接理解できるレベルの言語)に近い形のプログラミング言語)と同様にプログラマが記述する範囲が多く、ハードウェアの制御知識が要求される部分もあることから、習得しにくいという側面があります。
一方、コンパイル型のため動作が高速で、ファイルサイズもコンパクトになりやすく、プログラミングに制限のあるハードウェア周辺でも活躍できるといったメリットがあります。また、汎用性が高く動作できるハードウェアが多いため、OS周りのシステムや組み込み・ハードウェア領域、IoT分野などで活用されています。
C++(シープラスプラス)との違い
C++はC系言語と呼ばれるC言語を元に派生した後発言語の一つで、AT&Tベル研究所で開発されました。
C言語の機能や特徴を継承しながら、言語としての表現力と効率性の向上のために、元来の手続き型プログラミングの他に、オブジェクト指向プログラミングやジェネリックプログラミング(型に依存しない抽象的な実装をするプログラミング)のような複数のプログラミング手法が可能になっています。また、C言語同様に高級言語(自然語に近い形で文字として理解しやすいプログラミング言語)としても低水準言語としても使用可能です。
なお、C++についてはこちらの記事もご確認ください。
C言語でできること
C言語は汎用的なプログラミング言語であるため、できることは非常に多岐にわたります。スマホアプリの作成はもちろん、ハードウェアを制御する組み込みソフトウェア、OSなどの基幹開発まで幅広い分野で採用されています。一例として身近な例を紹介しましょう。
ロボット
産業用ロボットなど、特定の動きを繰り返して精密な動作を行うロボットには、その制御をする組み込みソフトウェアとして、C言語が広く利用されています。
ゲーム
1990年代中盤以降、さまざまなゲーム専用機の性能が飛躍的に向上しました。この性能向上にともなう媒体の大容量化を受けて、もともと資源制約が厳しくアセンブラ(C言語よりもさらに機械語よりの言語)で開発を行っていたゲームは、C言語が主流になりました。
現在ではC++やJavaなどの高水準言語が利用されるケースが多くなっていますが、C言語は移植性に優れた言語であるため、今日でも他の言語と併用して利用されることが少なくありません。
OS
C言語は、ハードウェアの制御もできるため、OSのような基幹システムを開発することもできます。
一般的に知られているものとしては、Mac OS XやLinuxの中核を担っているLinuxカーネルはC言語によって記述されています。
IoT(アイオーティー)(Internet of Things)
容量などの問題からC++やC#、Javaといった高水準言語での実装が困難な小規模デバイスの組み込みシステムには、C言語が利用されています。
制御系
組み込みソフトウェアはかつて携帯電話のOSや制御に利用されていました。現在は電子レンジや洗濯機、炊飯器、エアコンなどの白物家電、プリンタやFAXなどのオフィス家電、カーナビなどの車載電子機器、自動車の電子制御などの制御系で使用されています。
C言語の基礎
ここからはC言語を実際に書く際の基礎的な部分についてご紹介します。
演算子
C言語の演算子は次の通りです。
演算子 | 内容 |
---|---|
+(加算) | xにyを加えます。ex)x + y |
-(減算) | xからyを引きます。ex)x - y |
*(乗算) | xにyをかけます。ex)x * y |
/(除算) | xをyで割ります。ex)x / y |
%(剰余算) | xをyで割った余りを求めます。ex)x % y |
型と変数
C言語の基本的な型と変数は次のようなものがあります。
型名 | 内容 |
---|---|
void | データ型不明、戻り値がないなどで使用 |
char | 文字型 |
int | 整数型 |
short | 16ビット整数型 |
long | 32ビット整数型 |
float | 単精度浮動小数点型 |
double | 倍精度浮動小数点型 |
- ※環境によって変わる場合があります
条件分岐
if、else if、elseの3つで条件を分岐します。
- ※例
この例の場合、変数aが10以上の場合、 5以上10以下の場合、それ以外、の3つに分岐します。
ループ
forによってループ条件を定義し、条件を満たすまで処理を繰り返します。
- ※例
この例の場合、変数iが0から始まり、1ずつ増えながら、10以下の間、毎回printfを実行します。
関数の作り方
関数は次のような形で定義します。
戻り値があれば型に合わせてintやfloatを指定し、なければvoidを指定します。
戻り値の型 関数名(引数){
処理;
return 戻り値;
}
- ※例
この例の場合、int型の返り値を持つ関数calを定義しています。
サンプルを元にC言語を書いてみよう!
Hello Worldを実行する
まずは、はじめてのプログラミングの定番、Hello Worldを実行してみましょう。
- ※サンプル
このサンプルの例を1行ずつ解説していきます。
まず1行目の#include<stdio.h>は、プログラムに必要なヘッダーファイルを読み込むときに使用します。ヘッダーファイルにはプログラムに必要な関数が入っているため、main関数の前に記述します。
2行目は関数の定義です。void mainは、戻り値がないという意味のvoid型で定義した関数になります。今回はメインの関数が一つだけなのでmainと定義します。
3行目が関数の処理内容の一つ目になります。サンプルの場合、printf関数によって、文字列を出力することになり、その内容はprintf関数の引数である、Hello Worldという文字列になります。
このサンプルを実行すると次のように表示されます。
条件分岐とループを使用したプログラム
forとifを組み合わせた条件分岐とループです。
- ※サンプル
このサンプルの例を1行ずつ解説していきます。
1行目は上述のHello Worldのサンプルと同じです。
2行目ではint型の関数mainを定義しています。そのため下の11行目でint型の戻り値(return)を指定しています。
3行目ではint型変数としてiを宣言しています。
4行目がループ処理です。今回の場合、変数iが1から始まり、1づつ増えていき、10以下の間ループし続けます。つまり、このサンプルでは全部で10回ループします。
5行目が条件分岐です。今回は、iが5以上の場合とそうでない場合で条件が分岐します。変数iが5以上の場合、6行目を実行、そうでない場合は8行目を実行します。
6行目は、printf関数で、%d(int型で表示)の形で、iを表示し、その後ろに!と\n(改行コード)も表示するよう指示しています。
8行目も同じくprintf関数ですが、!がない形で表示するよう指示しています。
最後に11行目では、3行目で指定したようにint型の変数のため、0を返すように指定しています。
このプログラムを実行すると次のように表示されます。
C言語は最も汎用的といっても良い言語!ぜひ一度トライしてみては?
非常に古く汎用的な言語であるC言語は、人間に理解しやすい高級言語であると同時に、ハードウェアを制御する低水準言語としても高い能力を持っています。コンピュータに対する知識を深めることによって、OSや組み込み制御システムなどの開発を手掛けることもできるため、2019年現在でも需要は高く、多くの産業で活躍しています。特に現在注目を浴びているIoTの分野では欠かせない言語として需要が高まっています。
C言語は現在主流となっているオブジェクト指向言語に比べると習得に時間のかかる言語ですが、なんでもできる言語という意味では他にない魅力を持った言語です。よりシステムについて理解を深めたい、汎用性の高い言語を習得してみたいと感じたら、ぜひ一度トライしてみてください。
(2019年11月現在)