C キーワード

"キーワード" は、C コンパイラに対して特別な意味を持つ単語です。 変換フェーズ 7 および 8 では、識別子は、C キーワードと同じスペル (大文字と小文字を区別する) にすることはできません。 詳細については、プリプロセッサ リファレンスの「変換フェーズ」を参照してください。 識別子の詳細については、識別子に関するページを参照してください。

標準の C キーワード

C 言語では、次のキーワードを使用します。

auto
break
case
char
const
continue
default
do
double
else
enum

extern
float
for
goto
if
inline1, a
int
long
register
restrict1, a
return

short
signed
sizeof
static
struct
switch
typedef
typeof
typeof_unqual
union
unsigned
void
volatile

while
_Alignas2, a
_Alignof2, a
_Atomic2, b
_Bool1, a
_Complex1, b
_Generic2, a
_Imaginary1, b
_Noreturn2, a
_Static_assert2, a
_Thread_local2, b

1 ISO C99 で導入されたキーワード。
2 ISO C11 で導入されたキーワード。
a Visual Studio 2019 バージョン 16.8 以降、これらのキーワードは、/std:c11 または /std:c17 コンパイラ オプションが指定される場合、C としてコンパイルされるコードでサポートされます。
b Visual Studio 2019 バージョン 16.8 以降、これらのキーワードは認識されますが、/std:c11 または /std:c17 コンパイラ オプションが指定される場合、C としてコンパイルされるコードでは、コンパイラによってサポートされません。

キーワードを再定義することはできません。 ただし、C プリプロセッサ ディレクティブを使用すると、コンパイルの前にキーワードを置換するテキストを指定できます。

Microsoft 固有の C キーワード

ANSI C および ISO C 規格では、先頭にアンダースコアが 2 つ付いた識別子がコンパイラ実装用に予約されています。 Microsoft の規則により、Microsoft 固有のキーワード名には先頭にアンダースコアを 2 つ付けることになっています。 これらの単語を識別子名として使用することはできません。 二重アンダースコアの使用など、識別子の名前付けに関する規則については、識別子に関するページを参照してください。

次のキーワードと特殊な識別子は、Microsoft C コンパイラで認識されます。

__asm5
__based3、5
__cdecl5
__declspec5
__except5
__fastcall
__finally5

__inline5
__int165
__int325
__int645
__int85
__leave5
__restrict

__stdcall5
__try5
__typeof__
__typeof_unqual__
dllexport4
dllimport4
naked4
static_assert6
thread4

3__based キーワードには、32 ビットおよび 64 ビット ターゲット コンパイルに関する使用制限があります。
4 これらは、__declspec で使用するときは特殊な識別子です。他のコンテキストでの使用は制限されません。
5 以前のバージョンとの互換性のため、これらのキーワードは先頭に 2 つのアンダースコアが付いているものだけでなく、Microsoft の拡張機能を有効にしている場合は 1 つのアンダースコアが付いているものも使用できます。
6<assert.h> を含めない場合、Microsoft Visual C コンパイラによって static_assert が C11 _Static_assert キーワードにマッピングされます。

Microsoft 拡張機能は既定で有効になっています。 移植可能なコードを作成するために、コンパイル時に /Za (言語拡張機能を 無効にする) オプションを指定することで、Microsoft 拡張機能を無効にすることができます。 このオプションを使用すると、Microsoft 固有のキーワードの一部が無効になります。

Microsoft 拡張機能を有効にするときは、先に示したキーワードをプログラム内で使用できます。 言語標準に準拠するために、これらのキーワード (keyword)のほとんどは先頭に二重アンダースコアがあります。 4 つの例外 (dllexportdllimportnakedthread) は、__declspec でのみ使用され、先頭の二重アンダースコアは必要ありません。 残りのキーワードについては、下位互換性のために、アンダースコア 1 文字のバージョンがサポートされます。

関連項目

C の要素