C キーワード
"キーワード" は、C コンパイラに対して特別な意味を持つ単語です。 変換フェーズ 7 および 8 では、識別子は、C キーワードと同じスペル (大文字と小文字を区別する) にすることはできません。 詳細については、プリプロセッサ リファレンスの「変換フェーズ」を参照してください。 識別子の詳細については、識別子に関するページを参照してください。
C 言語では、次のキーワードを使用します。
auto
break
case
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
inline
1, a
int
long
register
restrict
1, a
return
short
signed
sizeof
static
struct
switch
typedef
typeof
typeof_unqual
union
unsigned
void
volatile
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 プリプロセッサ ディレクティブを使用すると、コンパイルの前にキーワードを置換するテキストを指定できます。
ANSI C および ISO C 規格では、先頭にアンダースコアが 2 つ付いた識別子がコンパイラ実装用に予約されています。 Microsoft の規則により、Microsoft 固有のキーワード名には先頭にアンダースコアを 2 つ付けることになっています。 これらの単語を識別子名として使用することはできません。 二重アンダースコアの使用など、識別子の名前付けに関する規則については、識別子に関するページを参照してください。
次のキーワードと特殊な識別子は、Microsoft C コンパイラで認識されます。
__asm
5
__based
3、5
__cdecl
5
__declspec
5
__except
5
__fastcall
__finally
5
__inline
5
__int16
5
__int32
5
__int64
5
__int8
5
__leave
5
__restrict
__stdcall
5
__try
5
__typeof__
__typeof_unqual__
dllexport
4
dllimport
4
naked
4
static_assert
6
thread
4
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 拡張機能を有効にするときは、先に示したキーワードをプログラム内で使用できます。 言語標準に準拠するために、これらのキーワードの大部分には先頭に二重アンダースコアが付いています。 4 つの例外 (dllexport
、dllimport
、naked
、thread
) は、__declspec
でのみ使用され、先頭の二重アンダースコアは必要ありません。 残りのキーワードについては、下位互換性のために、アンダースコア 1 文字のバージョンがサポートされます。