本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。
第1回|C言語とは何か:機械に近い言語を最初に学ぶ理由

はじめてのC言語 | 第1回
C言語ってどんな言葉?
C言語は、コンピューターの動きを比較的そのまま扱いやすいプログラミング言語です。Pythonのような高水準言語よりも機械に近く、メモリやデータ型を意識して書く場面が多い、という特徴があります。
そのためC言語は、次のような用途で長く使われてきました。
- OS
- 組み込みソフトウェア
- デバイス制御
- 処理速度や資源効率が重要なプログラム
「人にとって書きやすいこと」よりも、「コンピューターを正確に制御できること」を重視した言語だと考えると理解しやすいです。
プログラミング言語の中での位置づけ
機械語と高水準言語の中間にある
コンピューターが直接理解できるのは「機械語」と呼ばれる言葉です。
しかし、機械語は人間にとってとても読みにくく、扱いにくいものでした。
そこで登場したのが、機械語を少し人間向けにした「アセンブリ言語」です。
さらにその後、もっと読み書きしやすい「高水準言語」が発展していきました。
C言語は、こうした流れの中で生まれたプログラミング言語です。
- 機械語ほど低水準ではない
- しかしPythonやJavaScriptほど抽象化されていない
このためC言語は、コンピューターの仕組みを学ぶ入口として今でも重要です。
C言語が初心者に向いている理由
C言語は簡単な言語ではありませんが、次の基本を明確に学ぶことができます。
- データ型
- メモリ
- 変数の扱い
- 条件分岐
- 繰り返し
- 関数
- コンパイルという仕組み
後でPythonや他の言語を学ぶときにも、C言語で得た理解が土台になります。
C言語はなぜ「機械に近い」と言われるのか
型を明示して書く必要がある
C言語では、変数を使う前に「何を入れる変数なのか」を明示します。
int count = 10;この int は「整数型」を表します。
C言語では、こうした型を意識して書くことが基本です。
メモリを意識する場面が多い
C言語では、データがメモリ上でどう扱われるかが重要です。たとえばポインタを使うと、メモリ上のアドレスを直接扱えます。
これは強力な機能ですが、誤ると不具合の原因になります。そのためC言語では、あいまいな書き方よりも正確な記述が求められます。
曖昧さをあまり許さない
最近の言語には、実行時に自動で補ってくれる機能が多くあります。一方でC言語は、必要な情報を自分で明示して書く場面が多いです。
この性質により、動作の仕組みを理解しやすい反面、ミスも表面化しやすくなります。
C言語とUNIXの関係
最初のUNIXはアセンブリ言語で書かれていた
初期のUNIXは、主にアセンブリ言語で実装されていました。アセンブリ言語は機械に近いため、高速で細かい制御ができますが、次の問題がありました。
- 読みにくい
- 修正しにくい
- 別の機種へ移しにくい
UNIXを実装しやすくするためにC言語が育った
C言語は、Bell LabsでDennis Ritchieらによって開発されました。背景には、UNIXのようなシステムソフトウェアを、アセンブリ言語より保守しやすく、移植しやすい形で書きたいという目的がありました。
ここで重要なのは、C言語が「最初から完成した形で存在し、その後UNIXに使われた」のではなく、UNIXの開発と強く結びつきながら発展したことです。
Cで書き直したことで移植性が高まった
UNIXの大部分をC言語で書き直したことで、特定のCPUに強く依存していた部分を減らすことができました。その結果、システムを別のハードウェアへ移植しやすくなりました。
この「移植しやすさ」は、C言語が広く普及した大きな理由の1つです。
最初に動かすCプログラム
サンプルコード
次のコードを hello.c という名前で保存します。
#include <stdio.h>
int main(void) {
printf("Hello, C!\n");
return 0;
}コードの意味
#include <stdio.h>
printf を使うために必要な標準入出力ライブラリを読み込みます。
int main(void)
プログラムの開始位置です。C言語では通常、main 関数から実行が始まります。
- int は戻り値の型
- void は引数なしを意味します
printf(“Hello, C!\n”);
文字列を画面に表示します。\n は改行です。
return 0;
プログラムが正常終了したことをOSに伝えます。
macOSでの実行手順
1. ターミナルを開く
macOSのターミナルを起動します。シェルは zsh 前提にしています。
2. ファイルを作成する
たとえばデスクトップで作業するなら、次のように移動します。
cd ~/Desktop
エディタで hello.c を作成し、先ほどのコードを保存します。
vi hello.c3. コンパイルする
macOSでは通常 clang が使えます。
clang hello.c -o helloこのコマンドの意味は次のとおりです。
- clang : Cコンパイラ
- hello.c : 入力ファイル
- -o hello : 出力ファイル名を hello にする
macOSでは、
clangというCコンパイラが標準で使われています。
一方で、gccコマンドを実行しても内部的には clang が呼び出される仕組みになっています。
そのため、通常の開発では gcc と同じように使うことができますが、厳密にはGNUのgccそのものではありません。
4. 実行する
./hello実行結果は次のようになります。
Hello, C!初学者がつまずきやすい点
コンパイルと実行は別の作業
C言語では、書いたコードをすぐ実行するのではなく、まずコンパイルします。
流れは次のとおりです。
- hello.c を書く
- clang でコンパイルする
- 実行ファイルを起動する
Pythonのように「そのまま実行する」形式とは異なります。
./helloの ./を忘れない
ターミナルでカレントディレクトリにある実行ファイルを動かすには、通常 ./ を付けます。
./hellohello だけでは実行できないことがあります。
拡張子は .c
ファイル名は hello.c にします。.txt など別の拡張子だと、コンパイラがCのソースコードとして扱えません。
まとめ
この回のポイントは次の4つです。
- C言語は機械に比較的近いプログラミング言語である
- 型やメモリを意識して正確に書く必要がある
- C言語はUNIXの発展と強く結びついている
- macOSでは clang を使ってコンパイルし、実行できる
次回予告
次回は、はじめてのCプログラムを実際に動かしてみます。
小さなコードの中にある、main や printf、return の意味を、ゆっくり確かめていきましょう。












