識別子
変数名は基本的に自由に決められますが、一定の規則があります。例えば、他の場所ですでに使用されている名前は使用できません。区別がつかなくなるためです。
変数名以外にも関数名、ポインタ名、マクロ名などはプログラマーが自由に決めることができます(関数やポインタ、マクロについては後述します)。これらの、プログラマーが自由につけることができる名前を識別子といいます。以下に識別子の命名規則を示します。
- 識別子に使用できる文字は半角のアルファベットの大文字、小文字、数字、アンダーバー(_)のみである。
- すでに使用されている名前を使うことはできない。
- アルファベットの大文字と小文字は区別される。
- アンダーバーまたは数字で始まる名前は使用できない。
- 予約後と同じ名前は使用できない。
このルールのうち、アンダーバーで始まる名前を使用するのは、文法的には許可されています。しかし処理系が内部的に使用する「予約済み」識別子となっているので、使用するべきではありません。それ以外のルールはC言語の文法として決まっています。
予約語
予約語とは、C言語のプログラムにおいて特別な意味を持つ言葉です。予約語はキーワードとも呼ばれます。規格上は32個あります。しかし、多くの処理系ではasmも予約語として扱われるので33個と考えます。また、C言語の新しい規格(C99,C11)によって追加された予約語も存在します。
- asm (規格には含まれない)
- auto
- break
- case
- char
- const
- continue
- default
- do
- double
- else
- enum
- extern
- float
- for
- goto
- if
- int
- long
- register
- return
- signed
- sizeof
- short
- static
- struct
- switch
- typedef
- union
- unsigned
- void
- volatile
- while
C99で追加された予約語
- _Bool
- _Complex
- _Imaginary
- inline
- restrict
C11で追加された予約語
- _Alignas
- alignof
- _Atomic
- _Generic
- _Noreturn
- _Static_assert
- _Thread_local
余談ですが、新しく追加された予約語がアンダーバーや大文字で始まるのは、独自機能を提供していた処理系に配慮した結果だと思われます。C99やC11で予約語が追加されたのは機能が増えたからですが、それらの新機能はすでにいくつかの処理系では独自に実装していたものでした。その処理系で使われる独自の予約語と衝突しないようにこのような名前になったと思います。
予約語はC言語の文法を表す言葉であることから、予約語の意味をすべて答えることができたら、C言語の文法をマスターしたと言えるでしょう。
まとめ
プログラマーが自由に決められる名前を識別子という。
識別子には予約語と同じ名前にできないなどの制約がある。
コメント