この記事のランク | |
---|---|
読む時間 | 3分 |
重要度 |
元々はUNIXというOSを開発するために生まれた言語で、C言語で作られているシステムも多く、Python、Javaに続いて需要がある人気のプログラミング言語です。
この記事では、C言語で何ができるのか?をテーマに、Cの特徴を実際のソースコードを見ながらご紹介致します。
Twitter(@nana_korobi04)でも情報発信していますので、
フォローいただけると嬉しいです!
C言語でできること
C言語は汎用性が高いプログラミング言語で、以下のような様々なシーンで活用されています。
組み込み系システム
組み込み系システムはC言語が最も活用されている分野で、電子レンジやエアコンといった家電から、カーナビや自動車のコンピュータ部分、ロボットなどハードウェアを司ることができます。
制御系システムも呼ばれており、私たちの生活に密着したプログラミング言語といえますね。
IoT/AI
C言語はハードウェアに密着したプログラミング言語で、処理速度が速くかつ省電力で起動するため、物理的のリソースが限られているスマートウォッチや、大量のデータを処理するAIの開発に適しています。
コンピューターゲーム
C言語はシューティングゲームや横スクロールゲームといった簡単なコンピュータゲームを開発することができます。
現在のアーケードゲームや家庭用のコンシューマゲームはC言語を拡張したC++で作られていることもあり、C++を習得後、基礎の部分を学ぶためC言語を習得するゲームプログラマもいるようです。
C言語とC++の違い
C言語は手続き型言語と呼ばれ、ソースコードの上から順番に処理が流れていきますが、C++はJavaなどで採用されているオブジェクト指向を取り入れ、効率良く開発できるように改良されています。
また、C言語では文字や数字などデータの種類を指定しますが、C++はジェネリックプログラミングといって、データの種類を意識せずにコーディングすることができます。
C言語とC#の違い
C#はMicrosoft社がJavaをベースに開発したオブジェクト指向のプログラミング言語で、文法はC言語やC++と似ていますが、C言語やC++とは互換性がない全く異なる言語となります。
オブジェクト指向については下記の記事で詳しく解説していますので、是非ご参考にしてください!
C言語のはじめかた
C言語は、人間が書いたコードをコンピュータが処理できるように変換するコンパイラという環境が必要なプログラミング言語です。
C言語のコンパイラはMicrosoftが提供しているVisual Studioが有名ですが、会員登録が発生するため、今回はgccコンパイラという無償のものを使います。
1.「gccコンパイラ」のインストール
下記のサイトにアクセスしてください。
以下の手順でインストールを進めてください。
2.ソースコードを記載
これでC言語の開発環境の準備ができました。
それでは、実際にコードを書いてみましょう。
#include <stdio.h>
int main(){
printf("Hello\n");
return 0;
}
以下、1行づつ構文を解説していきます。
3.Cプログラムを実行
それでは実際にプログラムを動かしてみましょう。
C言語のプログラムを実行する際は、先ほどインストールしたgccコンパイラを使います。
cygwinを起動してください。
コンソールに「gcc Hello.c」と入力してコンパイルを実行してください。
コンパイルエラーが出なければ、「./a.exe」と入力してプログラムを起動
cygwinのコンソールに「Hello」という文字が出力されましたでしょうか?
アドレスとポインタ
C言語はプログラミング言語の中でも、特に難易度が高いと言われていますが、その理由はアドレスとポインタという概念が分かりにくいことが理由です。
ポインタの何が良いのかというと、呼び出した変数の中の値を参照したり書き換えたりすることができます。
実際にプログラムを作って動きを見て理解してみましょう。
#include<stdio.h>
int main() {
int x;
x = 5;
printf("x=%d\n", x);
printf("&x=%p\n", &x);
int *p;
p = &x;
printf("p=%p\n", p);
printf("*p=%d\n", *p);
return 0;
}
上記のサンプルコードを先ほどのHello.cと同じ手順で実行して下さい。
出力結果とコードを照らし合わせながら解説していきます。
実行結果の1行目、2行目を比べてみましょう。
<実行結果>
x=5
&x=0xffffcc24
※「0xffffcc24」の部分がアドレスで、コンピューターによって異なります。
実行結果の1行目は、変数xにセットされた整数の”5”がそのまま出力されています。
実行結果の2行目は、変数xのアドレスが16進数で出力されています。
実行結果の3行目、4行目を見てみましょう。
<実行結果>
p=0xffffcc24
*p=5
※「0xffffcc24」の部分がアドレスで、コンピューターによって異なります。
注目すべきは、printf()で「p」を指定すると変数xのアドレスが出力され、「*p」を指定すると変数xの整数が出力されている点です。
このように、ポインタ変数はアドレスを扱う場合は間接演算子”なし”、変数の中身を扱う場合は間接演算子”あり”、といった具合に使い分けを行います。
ポインタ変数の何が良いのかというと、ポインタ変数pはアドレスの情報しか持たないため、メモリの使用量が減るということです。
今回は「5」という1バイトの整数ですが、例えば変数xに100バイトのデータがセットされていた場合、ポインタではない変数pにセットしようとすると、+100バイト(合計200バイト)のメモリを使うことになります。
まとめ
C言語はアドレスとポインタを上手く使うことにより、メモリが抑えられ高速処理が実現できるということがお分かり頂けたかと思います。
他のプログラミング言語ではメモリを意識してコーディングする必要はありませんが、どんな言語でも変数を定義する際はメモリを使っているのです。
C言語を通してメモリ管理の重要性を理解し、他の言語でもメモリを抑えたコーディングが出来ることが優秀なプログラマと言えるでしょう。