キーワード (C言語)

C言語のキーワード詳解



本記事では、C言語の核となるキーワードに焦点を当て、その詳細を解説します。C言語のキーワードは、ISO/IEC 9899規格に準拠しており、言語の進化とともにその数と機能は変化してきました。本稿はキーワードに絞った解説であり、C言語全体の構造や、キーワード以外の要素については扱いません。読者の理解を助けるため、適宜他のプログラミング言語との比較も行います。なお、初期のC言語の教科書である『The C Programming Language』(K&R)初版にはキーワードの記載がありませんでしたが、第2版では付録にキーワードが掲載されています。

C言語キーワードの特徴



C言語のキーワード数は、規格の改定ごとに変化してきました。

K&R第2版 (1988): 32個
C89/C90: 32個
C99: 37個 (_Bool, _Complex, _Imaginary, inline, restrict が追加)
C11: 44個 (_Alignas, _Alignof, _Atomic, _Generic, _Noreturn, _Static_assert, _Thread_local が追加)

基本型、分岐(if, switch)、反復(for, while)などの基本的な語は、C++でもほぼそのまま取り入れられています。

型に関するキーワード



C++と共通の語が多く使用されていますが、C99で導入された `_Bool`, `_Complex`, `_Imaginary`, `restrict` は、C++03以降の規格でもキーワードとなっていません。

整数型



`_Bool`, `char`, `short`, `int`, `long` があります。C99以降では、`long long` とすることで64ビット以上の幅を持つ整数型を表現できます。`_Bool` 型は整数型の一種であり、`true` や `false` はキーワードではなく、`stdbool.h` で定義されるマクロです。

符号の有無



`signed`, `unsigned` を使い、整数型の符号の有無を指定します。

浮動小数点型



`float`, `double` があります。`double` は `long double` 型を表現する際にも使用されます。

複素数



`_Complex`, `_Imaginary` がC99で標準化されました。`_Imaginary` は厳密には虚数型であり、すべての処理系でサポートされるわけではありません。これらは浮動小数点型と組み合わせて精度を指定します。

c
float _Complex c;
double _Imaginary i;


構造体共用体・列挙体



`struct`, `union`, `enum` は、タグ名を伴ってユーザー定義の型を定義する際に使用します。

c
struct example_struct { int a; };
union example_union { int a; float b; };
enum example_enum { A, B, C };


型修飾子



`volatile`, `const`, `restrict` があります。
`volatile` はコンパイラの最適化を抑止します。
`const` はオブジェクトが書き換えられないことを示します。
`restrict` はオブジェクトへのアクセスがポインタ経由でのみ行われることを示します (C99で標準化)。

記憶クラス指定子



`auto`, `extern`, `static`, `register` があります。

`auto` は自動記憶域期間を指定し、ブロックスコープ内のオブジェクトにのみ使用できます。現在は省略されることが一般的です。C++では意味が異なります。
`extern` は静的記憶域期間と外部リンケージを指定し、他のモジュールで定義された名前を参照する際に使用します。
`static` は静的記憶域期間と内部リンケージを指定します。ファイルスコープとブロックスコープで意味が異なります。
`register` は変数の記憶領域をCPUのレジスタに割り当てることを推奨します。

typedef



`typedef` は型に別名を付けます。構文上は記憶クラス指定子に分類されますが、記憶クラスとは直接関係ありません。

その他の型



`void` は、引数または返却値のない関数の宣言や定義、または特定の型を指さないポインタ型に使用します。

c
void function(void);
void p;


制御構造



制御に関する語もC++とほぼ共通ですが、Cには例外処理に関する語 (`try`, `catch`, `throw` など) は存在しません。

選択文



`if`, `else`, `switch`, `case`, `default` は、条件分岐を実現する選択文に使用します。

反復文



`for`, `while`, `do` は、ループを実現する反復文に使用します。

ジャンプ文



`goto` はラベルの位置に無条件ジャンプします。
`continue` はループの本体をスキップし、ブロックの最後にジャンプします。
`break` はループのブロックから抜け出します。
`return` は関数から抜け出し、返却値のあるものは値を返します。

マルチスレッド



`_Atomic`, `_Thread_local` は、C11で追加された、マルチスレッドに関するキーワードです。

アライメント



`_Alignas`, `_Alignof` は、C11で追加された、アライメントに関するキーワードです。

その他



`inline` は、C99で標準化された、関数指示子です。コンパイラにインライン展開のヒントを与えます。
`sizeof` は、式または型名のサイズを求める単項演算子です。
`_Static_assert` は、C11で追加された、コンパイル時の静的表明を提供します。
`_Generic` は、C11で追加された、型ジェネリックを提供するキーワードです。
`_Noreturn` は、C11で追加された、関数が return しないことを指定する関数指示子です。


脚注




関連項目



キーワード (C++))
CとC++の演算子

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。