C言語の基本|C言語を学ぶ前に知っておきたい基礎知識

C言語の文法を覚える前に、コンピュータとプログラムの関係から理解しよう。

C言語の学習を始めると、printf、変数、if文、for文、関数など、さまざまな書き方が登場します。

初めてプログラミングを学ぶと、「この記号は何のためにあるのだろう」「なぜこの順番で書くのだろう」と、文法そのものに意識が向きやすくなります。

もちろん文法を覚えることは大切です。しかし、その前に「そもそもプログラムとは何なのか」「プログラミング言語は何のために存在するのか」「自分が書いたC言語のコードをコンピュータはどのように実行しているのか」という全体像を知っておくと、その後の学習がずっと理解しやすくなります。

C言語は、人間が書いた命令とコンピュータ内部の動きとの関係を比較的イメージしやすいプログラミング言語です。

そのため、単にC言語の書き方を覚えるだけではなく、コンピュータがどのようにプログラムを実行しているのかを理解するための入り口としても適しています。

ここでは、細かなC言語の文法を学ぶ前に知っておきたい、プログラム、プログラミング言語、CPU、ソフトウェアなどの基本的な考え方を整理していきます。

プログラミング言語とは何か

プログラミング言語とは、人間がコンピュータに処理内容を伝えるために使用する言語です。

私たちは普段、人に何かをお願いするときに日本語などの自然言語を使います。

たとえば、

  • 「画面に文字を表示してください」
  • 「2つの数字を足してください」
  • 「入力された値が10以上ならメッセージを表示してください」

といった指示なら、人間同士であれば意味を理解できます。

しかし、コンピュータは人間が話している日本語を、そのままCPUの命令として実行しているわけではありません。

そこで、人間にもある程度理解しやすく、さらにコンピュータが処理できる形式へ変換できるように、決められたルールで命令を書く仕組みが必要になります。

そのために使われるのがプログラミング言語です。

C言語も、そのプログラミング言語の一つです。

C言語では、たとえば画面に文字を表示するとき、次のような形で命令を書きます。

printf("Hello\n");

人間から見ると、完全な日本語よりは機械的ですが、「何かを表示しているらしい」とある程度意味を読み取ることができます。

一方、コンピュータはこのC言語の記述を直接そのまま理解しているわけではありません。

C言語で書かれたプログラムは、コンピュータが実行できる形式へ変換されてから動作します。

この「人間が書きやすい形」と「コンピュータが実行できる形」の間をつないでいることが、プログラミング言語を理解するうえで大切なポイントです。

プログラムとは何か

プログラミング言語と一緒に覚えておきたい言葉が、プログラムです。

プログラムとは、コンピュータに実行してほしい処理を、決められた順番で並べた命令のまとまりです。

料理にたとえると分かりやすいでしょう。

料理を作るときには、

  1. 材料を用意する
  2. 材料を切る
  3. フライパンを温める
  4. 材料を炒める
  5. 味付けをする

というように、作業の順番があります。

コンピュータのプログラムも同じです。

「まずこの処理を行い、その次にこの処理を行う」という手順を記述しておき、コンピュータがその命令に従って処理を進めていきます。

プログラムの基本的な考え方

項目内容
プログラムコンピュータに行わせる命令をまとめたもの
命令を実行する中心CPU
基本的な処理命令を読み取りながら順番に処理する
プログラムで作られるものブラウザ、ゲーム、電卓、文章作成ソフトなど
プログラミングプログラムを設計して作成すること

私たちが普段利用している多くのソフトウェアも、内部ではたくさんのプログラムによって動いています。

たとえば電卓アプリであれば、

「数字を入力する」

「足し算のボタンを押す」

「計算する」

「計算結果を表示する」

といった処理があります。

画面上では簡単な操作に見えても、その裏側ではプログラムに書かれた命令が実行されています。

コンピュータが理解するのは最終的には0と1

C言語では、英単語や数字、記号などを組み合わせてプログラムを書きます。

たとえば、

printf("Hello\n");

というコードなら、人間にも比較的意味を想像しやすいでしょう。

しかし、CPUがこの文字列を見て、「これは画面にHelloを表示する命令だ」と人間のように理解しているわけではありません。

コンピュータ内部では、情報は最終的に0と1を組み合わせた形式で扱われます。

0と1は、電気的な状態の違いを表すのに適しています。

そのため、人間がC言語で書いたプログラムと、CPUが実際に処理する命令との間には変換が必要です。

図1:C言語のコードがコンピュータに伝わるまで

この図から分かること

私たちがC言語で入力したコードが、そのままCPUに渡されているわけではありません。

人間が記述したC言語のプログラムは、コンピュータが実行できる形式へ変換され、その変換後の命令をCPUが実行します。

C言語を学ぶときには、

人間が書くコード → コンピュータ向けに変換 → CPUが実行

という大きな流れを最初にイメージしておくとよいでしょう。

この変換に関係する重要な仕組みが、今後C言語を学んでいく中で登場するコンパイラです。

C言語のプログラムを実際に見てみよう

ここで、非常に簡単なC言語のプログラムを見てみましょう。

この段階では、すべての文法を理解する必要はありません。

「プログラムにはいくつかの命令があり、それぞれに役割がある」ということを確認していきます。

学習開始のメッセージを画面に表示するプログラム
#include <stdio.h>

int main(void)
{
    /* 学習開始のメッセージを表示する */
    printf("今日からC言語を学習します。\n");

    /* 正常に終了したことを表す */
    return 0;
}

このプログラムを実行すると、画面に

今日からC言語を学習します。

と表示されます。

短いプログラムですが、C言語のプログラムに登場する基本的な要素がいくつも含まれています。

#include <stdio.h>の役割

#include <stdio.h>

は、画面への文字表示などに必要となる機能を利用するための記述です。

このプログラムでは、あとで登場するprintfを利用するためにstdio.hを読み込んでいます。

今の段階では、

「printfなどを利用するための準備をしている」

と理解しておけば十分です。

int main(void)の役割

int main(void)

は、プログラムの実行が始まる重要な部分です。

C言語のプログラムを実行すると、基本的にはmain関数から処理が始まります。

そのため、mainはプログラムのスタート地点と考えると分かりやすいでしょう。

続く、

{

から、

}

までの間に、main関数で実行する処理を書いていきます。

コメントの役割

/* 学習開始のメッセージを表示する */

はコメントです。

コメントは、プログラムの内容を人間が理解しやすくするために書く説明です。

この部分は、通常の処理として実行されるものではありません。

プログラムが大きくなってくると、「ここでは何をしているのか」をコードだけから判断するのが難しくなることがあります。

そのため、必要に応じてコメントを使い、プログラムの目的や処理内容を分かりやすくしておきます。

printfの役割

printf("今日からC言語を学習します。\n");

は、画面に文字を表示している部分です。

printfはC言語で非常によく利用する機能の一つです。

丸括弧の中にある、

今日からC言語を学習します。

が実際に表示される文字です。

また、

\n

は改行を表します。

そのため、文字を表示したあと、次の表示位置が次の行へ移動します。

return 0;の役割

return 0;

は、main関数の処理を終了し、プログラムが正常に終了したことを表すための記述です。

最初の段階では、

「プログラムの最後に正常終了を伝えている」

と理解するとよいでしょう。

プログラム全体の役割

記述主な役割入門段階での理解
#include <stdio.h>必要な機能を利用する準備printfを使うための準備
int main(void)main関数を定義するプログラムのスタート地点
/* ... */コメントを書く人間向けの説明
printf(...)文字などを表示する画面への出力
\n改行する次の行へ移動
return 0;main関数を終了する正常終了を表す

初めて見ると記号が多く感じるかもしれませんが、一度にすべて暗記する必要はありません。

まずは、

「プログラムには開始地点がある」

「命令を順番に書く」

「printfで画面に文字を表示できる」

という程度から理解していけば大丈夫です。

プログラムとプログラミング言語は同じものではない

プログラムとプログラミング言語は似た言葉ですが、意味は異なります。

プログラムは、コンピュータに実行させる処理の内容です。

一方、

プログラミング言語は、その処理内容を書くためのルールです。

料理に置き換えて考えてみましょう。

料理の例コンピュータでの意味
レシピプログラム
レシピを書くための日本語や英語プログラミング言語
レシピを見ながら調理する人CPU
完成した料理実行結果

たとえば、「画面にメッセージを表示する」という目的があったとします。

この目的そのものは同じでも、C言語、Python、Javaなど、使用するプログラミング言語によって書き方は変わります。

つまり、

何をさせたいかがプログラムの内容であり、それをどのようなルールで記述するかがプログラミング言語

という関係です。

この違いを理解しておくと、将来ほかのプログラミング言語を学ぶときにも役立ちます。

言語が変われば書き方は変わりますが、「コンピュータに処理内容を伝える」という目的そのものは変わらないからです。

プログラミング言語にはそれぞれ得意分野がある

プログラミング言語にはC言語以外にもさまざまな種類があります。

どの言語にも特徴があり、利用される分野も異なります。

代表的な言語を簡単に比較すると、次のようになります。

言語主な利用分野特徴C言語との関係
C言語OS、組み込みシステム、高速な処理シンプルでコンピュータの仕組みを意識しやすいコンピュータの基礎を学びやすい
Python自動化、AI、データ処理、学習比較的読み書きしやすいC言語で実装された仕組みや拡張もある
Java業務システムなど大規模なシステム開発にも利用されるC言語と似た記述も見られる
JavaScriptWeb開発Webブラウザ上での処理に広く使われる条件分岐や繰り返しなど共通する考え方がある
C++ゲーム、高速なアプリケーションなどC言語をもとに機能が拡張されているC言語の知識を生かしやすい

大切なのは、「どのプログラミング言語が一番優れているか」と考えることではありません。

作りたいものや目的に合わせて、適した言語が選ばれます。

C言語には、コンピュータに近い部分を意識しながらプログラミングを学べるという特徴があります。

そのため、変数、条件分岐、繰り返し、関数などのプログラミングの基本だけでなく、コンピュータそのものの仕組みを理解するための土台も身につけやすくなります。

アプリケーションソフトウェアとシステムソフトウェア

コンピュータで使われるソフトウェアは、大きく考えるとアプリケーションソフトウェアとシステムソフトウェアに分けることができます。

アプリケーションソフトウェア

アプリケーションソフトウェアは、利用者が特定の目的を達成するために使用するソフトウェアです。

たとえば、

  • Webブラウザ
  • ゲーム
  • 表計算ソフト
  • 文章作成ソフト
  • 画像編集ソフト

などがあります。

私たちが普段パソコンやスマートフォンで直接操作するソフトウェアの多くが、このアプリケーションソフトウェアです。

システムソフトウェア

システムソフトウェアは、コンピュータそのものを動かしたり、アプリケーションが動作するための環境を提供したりするソフトウェアです。

代表的なものがOSです。

WindowsやLinuxなどのOSは、CPU、メモリ、記憶装置などのハードウェアを管理しながら、その上でアプリケーションを実行できるようにしています。

種類主な役割
アプリケーションソフトウェア利用者の目的に応じた処理を行うブラウザ、ゲーム、表計算ソフト
システムソフトウェアコンピュータ全体の動作を支えるWindows、LinuxなどのOS

アプリケーションが直接すべてのハードウェアを管理しているわけではありません。

多くの場合、アプリケーションはOSが提供する機能を利用しながら動いています。

図2:アプリケーション・OS・ハードウェアの関係

この図から分かること

私たちが普段操作しているアプリケーションの下にはOSがあり、さらにその下にはCPUやメモリなどのハードウェアがあります。

つまり、アプリケーションだけでコンピュータが動いているのではありません。

アプリケーション → OS → ハードウェア

というように、いくつかの仕組みが連携しています。

C言語はOSなどのコンピュータに近い領域とも関係が深いため、C言語を学ぶことで、普段は見えにくいコンピュータ内部の動きを意識しやすくなります。

CPUはプログラムの命令を実行する

プログラムについて理解するときに欠かせないのがCPUです。

CPUはCentral Processing Unitの略で、日本語では中央処理装置と呼ばれます。

コンピュータの中心となって計算や処理を行う装置であり、よく「コンピュータの頭脳」にたとえられます。

CPUは、プログラムとして用意された命令を読み取りながら処理を進めます。

基本的な流れを簡単にすると、次のように考えることができます。

  1. 実行する命令を読む
  2. どのような命令なのか確認する
  3. 必要な計算や処理を行う
  4. 次の命令へ進む
  5. 同じ流れを繰り返す

実際のCPUの仕組みはさらに複雑ですが、C言語を学び始める段階では、このイメージを持っておくことが大切です。

プログラムは基本的に上から順番に進む

次のような処理があると考えてみましょう。

名前を表示する
年齢を表示する
終了メッセージを表示する

基本的には、

名前を表示する
    ↓
年齢を表示する
    ↓
終了メッセージを表示する

という順序で処理されます。

C言語で書いたプログラムでも、基本的な処理の流れは上から下です。

そして、今後C言語を学習すると、単純に上から下へ進むだけではなく、処理の進み方を変える仕組みが登場します。

条件によって処理を変える

条件分岐を使うと、

もし点数が60点以上なら
    合格と表示する
そうでなければ
    不合格と表示する

というように、条件によって実行する処理を変えられます。

C言語では、こうした処理をif文などで記述します。

同じ処理を繰り返す

繰り返しを使うと、

同じメッセージを5回表示する

といった処理を効率よく記述できます。

C言語ではfor文やwhile文などが、この役割を担当します。

処理をまとまりに分ける

大きなプログラムでは、すべての処理を一か所に書くと分かりにくくなります。

そこで、

入力する処理
計算する処理
表示する処理

のように役割ごとに処理を分けることがあります。

C言語では、こうした処理のまとまりを作るために関数を利用します。

つまり、これから学ぶC言語の文法は、単なる記号や書き方の暗記ではありません。

コンピュータにどの順番で、どの処理を実行させるかを表現するための仕組みなのです。

人間が書きやすい形式とコンピュータが実行しやすい形式

人間とコンピュータでは、扱いやすい情報の形が異なります。

人間にとって、0と1だけで構成された大量のデータを読みながらプログラムを作るのは非常に大変です。

反対に、コンピュータは人間が普段使っている自然言語を、そのままプログラムとして自由に解釈して実行するわけではありません。

そこで、C言語のようなプログラミング言語が両者の間をつなぎます。

立場得意なこと苦手なこと
人間意味を考える、処理を設計する、読みやすいコードを書くCPU向けの命令を0と1だけで大量に記述する
コンピュータ決められた命令を高速に処理する人間の意図をそのまま理解する
プログラミング言語人間の考えをコンピュータへ伝えやすくする自分自身で命令を実行すること

ここで注意したいのは、プログラミング言語自身がプログラムを実行しているわけではないということです。

実際に処理を行う中心はCPUです。

C言語は、人間が考えた処理を記述するための手段であり、そのコードがコンピュータで実行可能な形へ変換されることで、CPUが処理を行えるようになります。

図3:人間が考えた処理をCPUが実行するまで

この図から分かること

C言語で学ぶ条件分岐、繰り返し、関数などは、それぞれ独立した知識ではありません。

すべて、

人間が考えた処理手順をコンピュータに正確に実行させるための仕組み

としてつながっています。

人間は「どんな処理を、どの順番で行えばよいか」を考え、それをC言語のルールに従って記述します。

そのプログラムがコンピュータの実行できる形式へ変換され、最終的にCPUが命令を順番に処理していきます。

この全体像を理解しておくと、これから条件分岐や繰り返し、関数を学んだときにも、「なぜこの機能が必要なのか」が見えやすくなります。

C言語を学ぶとコンピュータの仕組みを意識しやすくなる

C言語を学ぶ大きなメリットの一つは、コンピュータがどのようにプログラムを実行しているのかを意識しながら学習できることです。

プログラミング言語によっては、複雑な処理を非常に短く書けるものもあります。

それは便利な特徴ですが、内部で何が行われているのかを意識せずにプログラムを書ける場合もあります。

C言語では、比較的シンプルな仕組みを使いながらプログラムを組み立てていくため、処理の流れを確認しやすいという特徴があります。

今後学習が進んでいくと、CPUだけではなくメモリなどについて考える機会も増えてきます。

そのため、「プログラムを書くこと」と「コンピュータの仕組みを理解すること」を一緒に学びやすい言語だといえます。

C言語の知識はほかの言語を学ぶときにも役立つ

C言語で登場する基本的な考え方の多くは、ほかのプログラミング言語にも登場します。

たとえば、

  • 変数を使って値を扱う
  • 条件によって処理を変える
  • 同じ処理を繰り返す
  • 処理を関数としてまとめる

といった考え方です。

具体的な書き方は言語によって違いますが、プログラムを組み立てるための考え方には共通する部分があります。

そのため、C言語でプログラムの基本的な考え方を身につけておくと、Java、JavaScript、C++などを学習するときにも役立ちます。

Pythonのように見た目の書き方が大きく異なる言語でも、条件を判断する、処理を繰り返す、機能をまとめるといった基本的な発想は共通しています。

C言語を学ぶ主なメリット

ここまで見てきた内容から、C言語を学ぶメリットを整理すると次のようになります。

メリット内容
コンピュータの動きを理解しやすいCPUや処理の流れを意識しながら学習できる
プログラミングの基本を学べる変数、条件分岐、繰り返し、関数などの基本につながる
ほかの言語へ知識を応用しやすい多くの言語に共通する考え方を身につけられる
システムに近い分野を理解しやすいOSなど、コンピュータを支える仕組みへの理解につながる
処理を順序立てて考える力が身につくコンピュータに正確な手順を伝える練習ができる

C言語は、初めて学ぶと記号が多く、少し難しく感じることがあるかもしれません。

しかし、一つひとつの記述について、

  • 「これは何のために書いているのか」
  • 「コンピュータにはどのように伝わるのか」
  • 「CPUはどのような順番で処理するのか」

という視点を持って学習すると、単なる文法の暗記ではなくなります。

文法を覚える前に全体の流れをイメージしておこう

これからC言語を本格的に学習すると、さまざまな命令や記号が登場します。

そのとき、最初からすべてを暗記しようとすると、学習が難しく感じられることがあります。

まず意識したいのは、次のつながりです。

人間が処理を考える
        ↓
C言語のルールでプログラムを書く
        ↓
コンピュータが実行できる形へ変換される
        ↓
CPUが命令を実行する
        ↓
画面表示や計算などの結果が得られる

C言語の文法は、この流れの中で「人間がコンピュータへ処理内容を伝えるための書き方」に当たります。

これから登場する変数も、条件分岐も、繰り返しも、関数も、すべてコンピュータへ正確な処理手順を伝えるための仕組みです。

この全体像を頭の片隅に置いておけば、新しい文法が出てきたときにも、形だけを覚えるのではなく、その役割と意味を考えながら学習できるようになります。