C言語のきほん|変数の宣言と名前の付け方

変数はC言語の主役になる「データの箱」。宣言と名前の付け方を覚えると、コードがぐっと書きやすくなる。

前の記事で、C言語には int や double など、データの種類(データ型)があることを学びました。
ここからは、そのデータを実際にプログラムの中で使うために欠かせない 変数 を見ていきます。

変数は、ひとことで言うと データを入れておく箱 です。
たとえば、年齢、点数、温度、文字など、プログラムの中で扱いたい値を一時的に保存しておくために使います。

ただし、C言語ではいきなり箱を使うことはできません。
先に「どんな種類のデータを入れる箱なのか」を決めて、名前を付けてから使います。これが 変数の宣言 です。

このパートでは、次の2つをしっかり身につけていきます。

  • 変数を宣言する書き方
  • 分かりやすい変数名の付け方(識別子のルール)

ここは、C言語の学習でとても大事な土台です。
変数の使い方と名前の付け方が分かるようになると、scanf で入力を受け取るコードも、printf で表示するコードも、ずっと読みやすく書けるようになります。

変数は「データの入れ物」

まずはイメージから整理しましょう。

変数は、データを一時的に保存するための入れ物です。
引き出しや箱に名前を付けて、中に物をしまう感覚に近いです。

変数のイメージ

この箱は、宣言したときにメモリ上に用意されます。
そして、箱の大きさはデータ型によって決まります。

変数を宣言するとは?

C言語では、変数を使う前に「宣言」が必要です。
宣言では、次の2つを指定します。

  • 型名(どんなデータを入れるか)
  • 変数名(箱の名前)

文法(変数の宣言方法)

型名 変数名;

int number;
double temperature;
char letter;

この3行は、それぞれ次の意味です。

  • int 型の number という変数を作る
  • double 型の temperature という変数を作る
  • char 型の letter という変数を作る

サンプルプログラム: 変数の大きさを調べる

ファイル名:4_2_1.c

// 変数の大きさを調べるプログラム
#include <stdio.h>

int main(void)
{
    int score;           // 点数(整数)
    double height;       // 身長(小数)
    char grade;          // 評価(1文字)

    printf("変数の大きさを調べます。\n");
    printf("int型の変数 score の大きさは%zuバイト\n", sizeof(score));
    printf("double型の変数 height の大きさは%zuバイト\n", sizeof(height));
    printf("char型の変数 grade の大きさは%zuバイト\n", sizeof(grade));

    return 0;
}

実行結果例(Windows + GCCの例)

変数の大きさを調べます。
int型の変数 score の大きさは4バイト
double型の変数 height の大きさは8バイト
char型の変数 grade の大きさは1バイト

※ バイト数は環境によって異なることがあります(処理系依存)。ここでは Windows + GCC のよくある例です。

sizeof と %zu をここでどう理解すればいい?

今は深追いしすぎなくて大丈夫です。
この段階では、次の理解でOKです。

sizeof演算子

sizeof は、変数や型が何バイト使うかを調べるためのものです。

%zu

printf で sizeof の結果を表示するときに使う書式指定です。

ざっくり覚え方

  • sizeof(変数名) でサイズを調べる
  • printf では %zu を使う

宣言するとメモリ上に「大きさ」を持つ

変数は、宣言した時点でメモリ上に領域が用意されます。
その大きさは型によって変わります。

図でイメージ

ここで大事なのは、変数名が違うだけでなく、型が違うと必要なメモリサイズも違うということです。

同じ型の変数はまとめて宣言できる

C言語では、同じ型の変数をカンマで区切ってまとめて宣言できます。

int number1, number2;
char letter1, letter2, letter3;

これは次のように1つずつ書いたのと同じ意味です。

int number1;
int number2;

char letter1;
char letter2;
char letter3;

サンプルプログラム: まとめて宣言する例

ファイル名:4_2_2.c

// 同じ型の変数をまとめて宣言するプログラム
#include <stdio.h>

int main(void)
{
    printf("変数の大きさを調べます。\n");

    int math_score, english_score;   // int型の変数をまとめて宣言

    printf("int型の変数 math_score の大きさは%zuバイト\n", sizeof(math_score));
    printf("int型の変数 english_score の大きさは%zuバイト\n", sizeof(english_score));

    char grade_a, grade_b, grade_c;  // char型の変数をまとめて宣言
    printf("char型の変数 grade_a の大きさは%zuバイト\n", sizeof(grade_a));
    printf("char型の変数 grade_b の大きさは%zuバイト\n", sizeof(grade_b));
    printf("char型の変数 grade_c の大きさは%zuバイト\n", sizeof(grade_c));

    return 0;
}

実行結果例

変数の大きさを調べます。
int型の変数 math_score の大きさは4バイト
int型の変数 english_score の大きさは4バイト
char型の変数 grade_a の大きさは1バイト
char型の変数 grade_b の大きさは1バイト
char型の変数 grade_c の大きさは1バイト

まとめて宣言するときの注意点(可読性)

まとめて宣言できるのは便利ですが、並べすぎると読みづらくなります。

読みやすい例

int width, height;

読みにくくなりやすい例

int a, b, c, d, e, f, g, h, i, j;

変数が多いときは、意味ごとに分けたり、1行ずつ書いたりした方が読みやすいです。
特に学習中は、無理にまとめすぎない方が安心です。

変数はどこで宣言すればいい?

C99より前の古いCでは、変数宣言はブロックの先頭にまとめて書く必要がありました。
でも、C99以降では 使う前ならどこで宣言してもOK です。

いまの書き方(C99以降ではOK)

printf("開始します。\n");

int count;   // ここで宣言してもよい

printf("%zu\n", sizeof(count));

学習中のおすすめ

最初のうちは、今までどおり main 関数の先頭付近にまとめて書くと分かりやすいです。
慣れてきたら、使う場所の近くで宣言する書き方にも挑戦するとよいです。

変数名は「識別子」

変数に付ける名前のことを、C言語では 識別子 と呼びます。

識別子は変数だけでなく、次のようなものにも使われます。

  • 変数
  • 関数
  • 配列
  • マクロ など

ここではまず、変数名としての識別子のルールをしっかり覚えましょう。

識別子の名付けルール(大事)

ルールを、分かりやすく表に整理します。

識別子のルール一覧

ルールOK / NG
先頭は英字または _score, _tempOK
先頭を数字にしない1scoreNG
2文字目以降は数字OKscore1, value2026OK
大文字と小文字は区別number と Number別物
予約語は使えないint, for, doNG

具体例で確認しよう(OKな名前 / NGな名前)

OKな変数名の例

int age;
int age2;
double average_score;
char gradeA;
int _count;

NGな変数名の例

int 2age;      // 先頭が数字
int for;       // 予約語
int total-score; // - は使えない(演算子として扱われる)

大文字と小文字は別の名前として扱われる

C言語は大文字と小文字を区別します。

int number;
int Number;

この2つは見た目が似ていますが、C言語では別の変数です。

初心者のうちは、似た名前を作ると混乱しやすいので、

  • number
  • total_number
  • max_number

のように、意味をはっきり分けた名前にするのがおすすめです。

予約語は変数名に使えない

C言語には、最初から意味が決まっている単語(予約語)があります。
たとえば、次のようなものです。

  • int
  • return
  • for
  • do

これらは変数名に使えません。

例(NG)

int int;
int return;

一方で、本文にもあるように、予約語を一部に含むだけなら問題ありません。

例(OK)

int form;
int dot;

分かりやすい名前を付けることがとても大事

ルールを守るだけでは、まだ十分ではありません。
実際に大事なのは、その変数が何を表しているか分かる名前 にすることです。

比較してみよう

分かりにくい例

int a;
double b;
char c;

分かりやすい例

int student_count;
double average_score;
char grade;

後から見返したときの読みやすさが、かなり違いますよね。

変数名の付け方のコツ(初心者向け)

コツ1:意味が分かる英単語を使う

  • 年齢 → age
  • 点数 → score
  • 合計 → total
  • 平均 → average
  • 温度 → temperature

英語が不安でも、よく使う単語は少しずつ慣れていけば大丈夫です。

コツ2:複数語はつなげて書く

C言語の変数名では、スペースは使えません。
複数語を使いたいときは、次のどちらかで書くことが多いです。

アンダースコアでつなぐ(おすすめ)

int student_count;
double average_score;

キャメルケース(これもよく使う)

int studentCount;
double averageScore;

どちらでもOKですが、学習中はアンダースコア付きの方が読みやすいことが多いです。

コツ3:略しすぎない

たとえば average を avg と略すのはよくありますが、慣れないうちは無理に略さない方が読みやすいです。

  • avg より average
  • num より number(場合による)

まずは「読んで意味が分かる」を優先しましょう。

変数宣言と名前の付け方をまとめて確認する例

最後に、宣言と命名のポイントがまとまっているシンプルな例を載せます。

ファイル名:4_2_3.c

// 学習データの変数を宣言する例
#include <stdio.h>

int main(void)
{
    int study_days;          // 学習日数
    int solved_problems;     // 解いた問題数
    double study_hours;      // 学習時間
    char rank;               // 評価ランク

    printf("study_days の大きさ: %zuバイト\n", sizeof(study_days));
    printf("solved_problems の大きさ: %zuバイト\n", sizeof(solved_problems));
    printf("study_hours の大きさ: %zuバイト\n", sizeof(study_hours));
    printf("rank の大きさ: %zuバイト\n", sizeof(rank));

    return 0;
}

このコードでは、

  • 型名
  • 分かりやすい変数名
  • コメント
  • sizeof による確認

がひと通りそろっています。4.2の学習にぴったりの形です。

補足(作業フォルダーと文字コードの注意)

本文にある補足もここで整理しておきます。

作業フォルダーの例

4章用に新しくフォルダーを作るなら、たとえば次のようにしておくと整理しやすいです。

  • C:\cwork\chap04

コマンドプロンプトの文字コード

コマンドプロンプトを再起動した場合は、必要に応じて次を入力してUTF-8にしておきましょう。

chcp 65001

日本語を表示するプログラムを扱うときに、文字化けを防ぎやすくなります。

まとめ

このパートでは、変数の宣言と名前の付け方の基本を学びました。

  • 変数はデータを入れる箱
  • 宣言は 型名 変数名; の形で書く。
  • sizeof で変数の大きさを調べられる。
  • 同じ型の変数はカンマでまとめて宣言できる。
  • 変数名(識別子)にはルールがある。
  • ルールを守るだけでなく、意味が分かる名前を付けることが大切

ここがしっかり理解できると、次に学ぶ「変数に値を入れる(代入)」や「計算する」といった内容がとても分かりやすくなります。
まずは、実際に自分で変数名を考えながらコードを書いて、宣言に慣れていきましょう。