コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

「キーワード (C言語)」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
Wakuna99 (会話 | 投稿記録)
編集の要約なし
Cewbot (会話 | 投稿記録)
m Bot作業依頼: sourceタグをsyntaxhighlightタグに置換 (Category:非推奨のsourceタグを使用しているページ) - log
80行目: 80行目:


記述例:
記述例:
<source lang="c">
<syntaxhighlight lang="c">
double _Complex z = 1.2 + 3.4 * I;
double _Complex z = 1.2 + 3.4 * I;
</syntaxhighlight>
</source>


===[[構造体]]・[[共用体]]・[[列挙型|列挙体]]===
===[[構造体]]・[[共用体]]・[[列挙型|列挙体]]===
89行目: 89行目:


記述例:
記述例:
<source lang="c">
<syntaxhighlight lang="c">
struct my_type
struct my_type
{
{
95行目: 95行目:
double b;
double b;
};
};
</syntaxhighlight>
</source>


===型修飾子===
===型修飾子===
118行目: 118行目:


記述例:
記述例:
<source lang="c">
<syntaxhighlight lang="c">
void func(void);
void func(void);


int a;
int a;
void *p = &a;
void *p = &a;
</syntaxhighlight>
</source>


== 制御構造 ==
== 制御構造 ==

2020年7月5日 (日) 22:42時点における版

C言語 > キーワード (C言語)

この項では、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 はオブジェクトへのアクセスが常にそのポインタを用いて行われることを明示する。C99にて標準化。

記憶クラス指定子

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

その他の型

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にて追加

関数指定子

_Noreturn
C11にて追加。関数が return しない(呼び出し元に戻らない)ことを指定。

関連項目