キーワード (C言語)

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

テンプレート:Pathnav この項では、C言語キーワードに関して説明する。

この項目は、プログラムの細かい説明には立ち入らず、他の言語と比較できるような説明を目的としている。ISO/IEC 9899 に沿って記載する。なお、1978年K&R第1版にはキーワードの記載が無かったが、1988年の第2版では付録A2.4に「キーワード(予約語)」がある。

Cのキーワードの特徴

  • キーワード数
    • K&R第2版 (1988): 32
    • C89: 32
    • C99: 37。_Bool, _Complex, _Imaginary, inline, restrict が追加。
    • C11: 44。_Alignas, _Atomic, _Generic, _Noreturn, _Static_assert, _Thread_local, alignof が追加。
  • プリミティブ型、分岐 (if, switch)、反復(for, while) などの基本的な語は、C++でもほぼそのまま取り入れられている。

型に関するキーワード

C++とほぼ共通の語を使用している。

整数型

_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, union, enum
これらは、タグ名を伴ってユーザ定義の型を定義するのに使用する。
記述例:
struct my_type
{
  int a;
  double b;
};

型修飾子

volatile, const, restrict
volatile はコンパイラの最適化を抑止する。
const はオブジェクトが書き換えられないことを明示する。
restrict はオブジェクトへのアクセスが常にそのポインタを用いて行われることを明示する。

記憶クラス指定子

auto, extern, static, register
auto は宣言したブロック内のみで有効。関数が終了すると消滅。記憶クラス指定子を省略した場合デフォルトでautoとなる。そのため実際上使用されていない。B言語のauto指定子との互換を意識したもの。
extern は他のモジュール内で定義されている名前を参照する際に使う。
static は関数内と関数外で意味が違う。関数内では静的変数の定義で、autoとは異なり関数が終了しても消滅せず、再び同じ関数を呼び出した場合は前回の値がそのまま残っている。関数外では可視性の制限で、static宣言した変数や関数は他のモジュールから参照できない。
register は変数の記憶領域をCPUのレジスタに割り当てる(必ずしも割り当てられるわけではない)。それ以外はautoと同じ。
typedef
テンプレート:Main
型に別名を付ける。これは構文上は記憶クラス指定子に分類されるが、記憶クラスと直接関係はない。

その他の型

void
引数や返却値のない関数で使用する。また、特定の型を指さないポインタ型にも使用する。
記述例:
void func(void);
 
int a;
void *p = &a;

制御構造

制御に関する語も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にて追加

return しないことを指定

_Noreturn
C11にて追加

関連項目

テンプレート:CProLang