
C言語のきほん|識別子の命名ルールとスタイル
名前の付け方で、コードは読みやすくも読みにくくもなる。C言語の識別子ルールとスタイルをやさしく身につけよう。
C言語を学び始めると、変数名や関数名をどう付ければよいのか、意外と迷うことがあります。
動けばOKに見えるかもしれませんが、実は「名前の付け方」はコードの読みやすさを大きく左右します。
同じ処理でも、名前がわかりやすいだけで理解しやすくなりますし、逆に名前があいまいだと、自分で書いたコードでもあとから読むのが大変になります。
特にC言語は、長く使われている言語で、いろいろな書き方の流儀があるので、最初の段階で基本を整理しておくのがとても大切です。
ここでは、識別子の命名ルールとスタイルについて、C言語らしい書き方を中心にやさしく解説していきます。
あわせて、予約語の注意点や、少し発展的な内容として 16進浮動小数点定数 についても、混同しやすいポイントを整理しながら説明します。
識別子とは
識別子とは、プログラムの中で名前として使うもののことです。
たとえば、次のようなものが識別子です。
- 変数名
- 関数名
- 配列名
- 構造体名
- typedef で付ける型名
例を見てみると、count や total_amount や print_result のような名前が識別子にあたります。
識別子は自由に付けられる部分が多いので、だからこそルールとスタイルを意識することが大事です。
識別子の基本的な命名ルール
まずは、C言語で名前を付けるときの基本ルールを押さえておきましょう。
ここはスタイル以前の「文法ルール」です。
使える文字
識別子には、主に次の文字が使えます。
- 英字(a~z、A~Z)
- 数字(0~9)
- アンダースコア _
先頭に使えないもの
識別子の先頭は、数字にできません。
先頭に使えるのは、英字かアンダースコアです。
大文字と小文字は区別される
C言語では、大文字と小文字は別の名前として扱われます。
- itemCount
- itemcount
- ITEMCOUNT
これらはすべて別物です。
例で確認
| 書き方 | 可否 | 理由 |
|---|---|---|
| count | ○ | 問題ない識別子 |
| total_amount | ○ | 問題ない識別子 |
| item2 | ○ | 数字は先頭以外なら使える |
| 2item | × | 先頭が数字 |
| total-price | × | ハイフンは使えない |
| class | ○(Cでは) | Cの予約語ではない |
| int | × | 予約語なので使えない |
識別子のスタイル
識別子には、よく使われる「見た目のスタイル」がいくつかあります。
ここは文法ルールではなく、読みやすさのための書き方です。
大事なのは、意味のある名前を付けること と プロジェクト全体で統一すること です。
小文字ベース(スネークケース)
すべて小文字で書き、単語の区切りをアンダースコアでつなぐスタイルです。
蛇のように見えるので、スネークケースと呼ばれます。
C言語ではこのスタイルがとてもよく使われます。
変数名や関数名で採用されることが多く、読みやすくて実用的です。
例:
int item_count;
double total_amount;
int get_user_age(void);メリット
- 単語の区切りがはっきりして読みやすい
- C言語のコードと相性がよい
- チーム開発で統一しやすい
デメリット
- 名前が長くなるとアンダースコアが増えて見た目が長くなりやすい
大文字ベース(大文字スネークケース)
すべて大文字で書き、単語の区切りをアンダースコアでつなぐスタイルです。
主に、マクロや定数で使われます。
例:
#define MAX_SIZE 100
const int DEFAULT_VALUE = 10;メリット
- 目立つので、定数やマクロだとわかりやすい
- 変数名と見分けやすい
デメリット
- 長い名前だと読みづらくなることがある
- 通常の変数名に使うと強調が強すぎて見づらくなる
使い分けの目安
- 定数やマクロ → 大文字ベース
- 通常の変数や関数 → 小文字ベース
この使い分けは、C言語のコードではかなり定番です。
キャメルケース
最初の単語を小文字で始め、2語目以降の先頭を大文字にするスタイルです。
ラクダのこぶのように見えるので、キャメルケースと呼ばれます。
例:
int itemCount;
double totalAmount;メリット
- アンダースコアを使わないので、すっきり見える
- Java や C# ではよく使われるため、他言語経験者にはなじみやすい
デメリット
- 単語の区切りが人によって読み取りにくいことがある
- C言語の既存コードと雰囲気が合わない場合がある
C言語では一般的にスネークケースがよく使われるので、特に理由がなければ小文字ベースに寄せると読みやすくなります。
スタイル比較を表で整理
| スタイル | 例 | C言語での使われ方 | 印象 |
|---|---|---|---|
| 小文字ベース(スネークケース) | item_count | 変数名・関数名でよく使う | 読みやすく標準的 |
| 大文字ベース | MAX_SIZE | マクロ・定数でよく使う | 目立つ、強調向き |
| キャメルケース | itemCount | Cでは少なめ | すっきり、他言語風 |
良い名前の付け方のコツ
スタイルと同じくらい大切なのが、名前の意味です。
文法的に正しくても、意味が伝わらない名前だと読みづらいコードになります。
何を表すかが伝わる名前にする
たとえば、次の2つを比べると、後者のほうが意味が伝わりやすいです。
- x
- item_count
もちろん、ループのカウンタのように短い名前が自然な場面もあります。
でも、長く使う変数や重要な値には、意味がわかる名前を付けるのがおすすめです。
略しすぎない
たとえば total_amt のような省略は、慣れていれば読めますが、初学者や別の開発者には伝わりにくいことがあります。
まずは total_amount のように、少し長くても意味がはっきりする名前を優先すると安心です。
同じ意味のものは同じ表現にそろえる
たとえば、ある場所では count、別の場所では num、別の場所では quantity のようにバラバラだと、読みにくくなります。
プロジェクト内で使う単語をそろえるだけでも、かなり読みやすくなります。
サンプルプログラムで確認する
このサンプルでは、識別子のスタイルの違いを見ながら、読みやすい命名の例を確認できます。
ファイル名:4_7_1.c
#include <stdio.h>
#define MAX_ITEMS 5
int main(void)
{
/* 小文字ベースの変数名(スネークケース) */
int item_count = 3;
int unit_price = 120;
/* 合計金額を計算する */
int total_price = item_count * unit_price;
/* 結果を日本語で表示する */
printf("購入数: %d 個\n", item_count);
printf("単価: %d 円\n", unit_price);
printf("合計金額: %d 円\n", total_price);
/* 大文字ベースの定数(マクロ)を表示する */
printf("登録できる最大件数: %d 件\n", MAX_ITEMS);
return 0;
}実行結果例
購入数: 3 個
単価: 120 円
合計金額: 360 円
登録できる最大件数: 5 件サンプルプログラムの見どころ
変数名は小文字ベースで統一している
int item_count = 3;
int unit_price = 120;
int total_price = item_count * unit_price;このように、変数名をスネークケースでそろえると、見た目に統一感が出ます。
どれも何を表しているかがわかりやすく、読み手にやさしい名前になっています。
マクロは大文字で目立たせている
#define MAX_ITEMS 5MAX_ITEMS は大文字ベースで書かれているので、通常の変数とは見た目で区別しやすくなります。
こうした区別は、コードを読むときの負担を減らしてくれます。
一貫性がいちばん大事
識別子のスタイルには複数の種類がありますが、実務でいちばん大切なのは 一貫性 です。
たとえば、同じファイルの中に次のような名前が混ざると、読みにくくなります。
int item_count;
int totalAmount;
int MAXVALUE;文法的には問題なくても、スタイルが混ざると視線が引っかかります。
プロジェクトでルールを決めてそろえるだけで、コードの可読性はかなり上がります。
おすすめの基本方針(C言語向け)
- 変数名・関数名は小文字ベース(スネークケース)
- 定数やマクロは大文字ベース
- 名前は意味がわかる英単語で付ける
この3つを意識するだけでも、かなり読みやすいコードになります。
解説補足:予約語
ここはとても大事な注意点です。
予約語とは、C言語ですでに特別な意味が決まっている単語のことです。
たとえば int や return や if は、C言語の文法として使う言葉なので、変数名や関数名には使えません。
予約語を識別子に使えない理由
コンパイラは予約語を見ると、変数名ではなく「文法の一部」として解釈します。
そのため、識別子として使おうとするとエラーになります。
たとえば、次のような名前は使えません。
- int
- char
- return
- while
よく使う予約語の例
| 分類 | 例 |
|---|---|
| 型 | int, char, double, void |
| 制御文 | if, else, switch, for, while |
| 記憶域や修飾 | static, extern, const, volatile |
| その他 | sizeof, typedef, return |
C11で追加された予約語もある
C言語には規格のバージョンがあり、C11で追加された予約語もあります。
たとえば次のようなものです。
- _Alignas
- _Alignof
- _Atomic
- _Generic
- _Noreturn
- _Static_assert
- _Thread_local
普段の入門コードではあまり見かけないものもありますが、識別子としては使えないので知っておくと安心です。
予約語と似た名前にするコツ
予約語そのものは使えませんが、意味を残して名前を工夫することはできます。
- int → value_int のように組み合わせる
- return → return_code のように用途を足す
- char → input_char のように具体化する
こうすると、意味も伝わりやすく、ルール違反も避けられます。
解説補足:16進浮動小数点定数
ここは識別子の話とは少し別の補足ですが、教材として知っておくと役立つ内容です。
特に、数字の書き方と名前の書き方が混ざって理解されやすいので、ここで整理しておくと安心です。
16進浮動小数点定数は、識別子ではなく数値定数の書き方 です。
C99で導入され、精度を厳密に扱いたい場面で使われます。
16進浮動小数点定数とは
コンピュータは内部的には2進数で数を扱います。
そのため、10進小数は2進数で正確に表せないことがあり、丸め誤差が出る場合があります。
一方、16進数は2進数と相性がよいので、ビット表現を意識した値を扱いやすいという利点があります。
そのため、システム寄りの処理や精度管理が重要な場面で使われることがあります。
表記方法
16進浮動小数点定数は、次の形で書きます。
- 先頭に 0x または 0X を付ける
- 16進数の整数部と小数部を書く(小数点を使う)
- 指数部に p または P を使う(2のべき乗を表す)
指数部は省略できません。必要ない場合でも p0 を付けます。
例:
0xa3.f2p-10
この p は、10進浮動小数点で使う e とは役割が違います。
ここでは 2の何乗倍するか を表しています。
例の読み方
0xa3.f2p-10 は、次のような意味です。
(10×16¹ + 3×16⁰ + 15×16⁻¹ + 2×16⁻²) × 2-10
ここでのポイントは次の2つです。
- a と f は16進数の桁なので、それぞれ 10 と 15
- p-10 は 2の-10乗倍するという意味
この表記は少し特殊なので、普段のアプリ開発ではほとんど使わないこともあります。
でも、規格上はC言語で使える表記として知っておくと、資料や低レベルコードを読んだときに役立ちます。
どんな場面で使うのか
16進浮動小数点定数は、次のような場面で使われることがあります。
科学技術計算
精度や再現性を重視する数値計算では、値の表現方法が重要になることがあります。
そうした場面で、意図したビット表現に近い形で値を扱いたいときに使われます。
システムプログラミング
ハードウェアに近い処理や、ビット単位の意味が強いコードでは、数値の表現を厳密にしたいことがあります。
そのような場合に、16進浮動小数点定数が役立つことがあります。
ふだんの学習での扱い方
入門の段階では、16進浮動小数点定数は無理に使わなくて大丈夫です。
まずは通常の整数定数や浮動小数点定数、そして識別子の命名ルールをしっかり理解することが優先です。
ただし、次の点だけは覚えておくと混乱しにくくなります。
- item_count のような名前は識別子
- 123 や 0x7B は整数定数
- 0xa3.f2p-10 は16進浮動小数点定数
つまり、名前のルール と 数値の書き方のルール は別物、という整理ができればOKです。
読みやすいコードにするための実践的な考え方
最後に、識別子の命名ルールとスタイルを実際のコードに活かすときの考え方を整理しておきます。
まずは読み手目線で考える
自分は意味がわかっていても、他の人が見てすぐ理解できるとは限りません。
数日後の自分も、実は他人に近い読み手です。
- 何の値か
- 単位は何か
- どういう役割か
このあたりが名前から伝わると、コードは一気に読みやすくなります。
スタイルはルール化して迷いを減らす
毎回どの書き方にするか悩むより、あらかじめ決めてしまうほうが効率的です。
たとえば次のように決めるだけでも、かなり書きやすくなります。
- 変数名はスネークケース
- マクロは大文字スネークケース
- 関数名もスネークケース
- 略語はできるだけ最小限
このようなルールがあると、コードの見た目が整って、学習の段階でもミスを減らしやすくなります。
名前は短すぎず、長すぎず
短すぎると意味が伝わらず、長すぎると読みにくくなります。
ちょうどよい長さで、意味がわかる名前を目指すのがコツです。
たとえば、n より item_count のほうが意味は伝わりますが、current_logged_in_user_total_item_count_for_screen のように長すぎると今度は読みにくくなります。
まずは、役割がすぐわかる範囲でシンプルに付けるのがおすすめです。
