キーワード (C言語)
From Wikipedia, the free encyclopedia
本記事では、C言語のキーワードに関して説明する。
本記事は、あくまでC言語のキーワードに焦点をあてた記事であり、C言語の全体像や、C言語のキーワード以外の面には立ち入らない。ISO/IEC 9899 に沿って記載する。読者の理解を助ける場合は適宜、他のプログラミング言語と比較する説明は行う。なお、1978年発行の書籍『The C Programming Language』(通称K&R、日本語訳は『プログラミング言語C』)第1版にはキーワードの記載が無かったが、1988年の第2版では付録A2.4に「キーワード(予約語)」がある。
- 索引
- auto
- break
- case
- char
- const
- continue
- default
- do
- double
- else
- enum
- extern
- float
- for
- goto
- if
- inline
- int
- long
- register
- restrict
- return
- short
- signed
- sizeof
- static
- struct
- switch
- typedef
- union
- unsigned
- void
- volatile
- while
- _AlignasC11
- _AlignofC11
- _AtomicC11
- _BoolC99
- _ComplexC99
- _GenericC11
- _ImaginaryC99
- _NoreturnC11
- _Static_assertC11
- _Thread_localC11
型に関するキーワード
C++とほぼ共通の語を使用している。ただし、C99で導入された _Bool, _Complex, _Imaginary, restrict は、C++03以降の規格でもキーワードとなっていない。
整数型
- _Bool, char, short, int, long
- C99以降では、
longは2つ続けてlong longとすることで、64ビット以上の幅を持つ1つの型を表す。C99で加わった_Bool型も整数型の一種として扱われ、またtrueやfalseはキーワードではなく、stdbool.hで定義されるマクロである。
符号の有無
- signed, unsigned
signedおよびunsignedは、整数型の前後に付加することによって符号の有無を指定する。
浮動小数点型
- float, double
doubleはlongと組み合わせてlong double型を表す際にも使用する。
複素数型
- _Complex, _Imaginary
- C99にて標準化。
_Imaginaryは厳密には複素数型ではなく虚数型であり、すべての処理系でサポートされるわけではない。これらは直前に浮動小数点型を伴って精度を指定する。
記述例:
double _Complex z = 1.2 + 3.4 * I;
構造体・共用体・列挙体
記述例:
struct my_type
{
int a;
double b;
};
型修飾子
- volatile, const, restrict
volatileはコンパイラの最適化を抑止する。constはオブジェクトが書き換えられないことを明示する。restrictはオブジェクトへのアクセスが常にそのポインタを用いて行われることを明示する。C99にて標準化。
記憶クラス指定子
- auto, extern, static, register
autoは自動記憶域期間 (automatic storage duration) を指定する。関数の引数を除く、ブロックスコープ (block scope) 内のオブジェクト(ローカル変数)にのみ指定可能[2]。ブロックを抜けると寿命が尽きる自動変数の定義に使用する。ただし記憶クラス指定子を省略した場合はデフォルトでautoとなるため、事実上使用されていない。B言語のauto指定子との互換を意識したもの。C++にも存在するが、C++11で仕様が変更され、型推論の機能に使われるようになったので注意が必要となる。externは静的記憶域期間と外部リンケージを指定する。他のモジュール内で定義されている名前を参照する際に使う。変数に指定した場合は、いわゆるグローバル変数となる。staticは静的記憶域期間と内部リンケージを指定する。ファイルスコープ(関数外)の変数または関数と、ブロックスコープ(関数内)の変数に指定可能だが、それぞれ意味が異なる。ファイルスコープの場合は可視性の制限で、externの対となり、static指定した変数や関数は他のモジュールから参照できない。ブロックスコープの場合は静的記憶域期間の指定で、autoの対となり、static指定した変数はプログラムの開始時に一度だけメモリ確保・初期化され、プログラムの終了時に寿命が尽きる静的ローカル変数となる。registerは変数の記憶領域をCPUのレジスタに割り当てる(必ずしも割り当てられるわけではない)。それ以外はautoと同じ。- typedef
- →詳細は「typedef」を参照
- 型に別名を付ける。これは構文上は記憶クラス指定子に分類されるが、記憶クラスと直接関係はない。
その他の型
記述例:
void func(void);
int a;
void *p = &a;
制御構造
制御に関する語もC++とほぼ共通であるが、Cには例外処理に関する語(try, catch, throw等)は存在しない。
選択文
- if, else
- switch, case, default
条件分岐を実現する選択文 (selection statements) に使われる。
反復文
- for, while, do
ループを実現する反復文 (iteration statements) に使われる。
ジャンプ文
- goto
- ラベルの位置に無条件ジャンプする。
- continue
- ループの本体をスキップし、ブロックの最後にジャンプする[3]。
- break
- ループのブロックから抜け出す。
- return
- 関数から抜け出す。返却値のあるものは値を返す。
マルチスレッド
- _Atomic, _Thread_local
- C11にて追加
アライメント
- _Alignas, _Alignof
- C11にて追加