第1回|C言語とは何か:機械に近い言語を最初に学ぶ理由

* 当サイトでは、コンテンツの一部に広告を掲載しています。

System Note $ cat /proc/ai-disclosure

本記事の構成および論理分析には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.c

3. コンパイルする

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の ./を忘れない

ターミナルでカレントディレクトリにある実行ファイルを動かすには、通常 ./ を付けます。

./hello

hello だけでは実行できないことがあります。

拡張子は .c

ファイル名は hello.c にします。.txt など別の拡張子だと、コンパイラがCのソースコードとして扱えません。

まとめ

この回のポイントは次の4つです。

  • C言語は機械に比較的近いプログラミング言語である
  • 型やメモリを意識して正確に書く必要がある
  • C言語はUNIXの発展と強く結びついている
  • macOSでは clang を使ってコンパイルし、実行できる

次回予告

次回は、はじめてのCプログラムを実際に動かしてみます。
小さなコードの中にある、main や printf、return の意味を、ゆっくり確かめていきましょう。

用途ごとに選ぶ C言語のおすすめ本

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

Created by UNIX Cafe

目次