C 关键字

“关键字”是对 C 编译器具有特殊含义的单词。 在翻译的第 7 和第 8 阶段中,标识符不能具有与 C 关键字相同的拼写和大小写。 有关详细信息,请参阅《预处理器参考》中的翻译阶段。 有关标识符的详细信息,请参阅标识符

标准 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

while
_Alignas 2、a
_Alignof 2、a
_Atomic 2,b
_Bool 1、a
_Complex 1、b
_Generic 2、a
_Imaginary 1、b
_Noreturn 2、a
_Static_assert 2、a
_Thread_local 2,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 和 ISO C 标准允许为编译器实现保留带有两个前导下划线的标识符。 Microsoft 的惯例是在 Microsoft 专用关键字名称前加上双下划线。 这些单词不能用作标识符名称。 有关标识符命名规则的说明,包括双下划线的使用,请参阅标识符

下列关键字和特殊标识符由 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 为了与以前的版本兼容,当启用 Microsoft 扩展时,这些关键字既可以使用两个前导下划线,也可以使用一个前导下划线。
6 如果不包括 <assert.h>,则 Microsoft Visual C 编译器会将 static_assert 映射到 C11 _Static_assert 关键字。

默认情况下将启用 Microsoft 扩展。 为了帮助创建可移植的代码,可以在编译过程中指定 /Za(禁用语言扩展)选项来禁用 Microsoft 扩展。 如果使用此选项,将禁用某些 Microsoft 专用关键字。

启用 Microsoft 扩展时,您可在程序中使用上面列出的关键字。 为了符合语言标准,其中大多数的关键字是以双下划线开头的。 dllexportdllimportnakedthread 这 4 个关键字除外,它们只与 __declspec 一起使用,不需要前导双下划线。 为了向后兼容,支持其余的关键字的单下划线版本。

请参阅

C 的元素