目录

重学C语言关键字

C语言关键字(C90,C99,C11)

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

标准 C 关键字

C 语言使用下列关键字:

auto break case char const continue default do double else enum

extern float for goto if inline int long register restrict return

short signed sizeof static struct switch typedef union unsigned void volatile

while _Alignas _Alignof _Atomic _Bool _Complex _Generic _Imaginary _Noreturn _Static_assert _Thread_local

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 __based __cdecl __declspec __except __fastcall __finally

__inline __int16 __int32 __int64 __int8 __leave __restrict

__stdcall __try dllexport dllimport naked static_assert thread

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 的元素

https://img-blog.csdnimg.cn/20201202172038778.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3phYmNkZXI=,size_16,color_FFFFFF,t_70关键字 ( keyword):word or identifier that has a particular meaning to the programming language;

保留字 ( reserved word):a reserved word is a word that cannot be used as an identifier, and a reserved word may have no meaning.

关键字是对编程语言有特定含义的词或标识符,保留字是不能定义为标识符的词,为系统保留,有些保留字可能并没有什么意义。例如java中的goto保留字,它并不是关键字,没有什么具体含义,仅为系统保留而已。

说了那么多,其实,,c和c++是不区分保留字和关键字的,c和c++所有的保留字都是关键字。

c/c++关键字(摘自cppreference.com):

auto break case char const continue default do double else enum extern float for goto if inline (since C99) int long register restrict (since C99) return short signed sizeof static struct switch typedef union unsigned void volatile while _Alignas (since C11) _Alignof (since C11) _Atomic (since C11) _Bool (since C99) _Complex (since C99) _Generic (since C11) _Imaginary (since C99) _Noreturn (since C11) _Static_assert (since C11) _Thread_local (since C11)
alignas (since C++11) alignof (since C++11) and and_eq asm atomic_cancel (TM TS) atomic_commit (TM TS) atomic_noexcept (TM TS) auto(1) bitand bitor bool break case catch char char16_t (since C++11) char32_t (since C++11) class(1) compl concept (since C++20) const constexpr (since C++11) const_cast continue co_await (coroutines TS) co_return (coroutines TS) co_yield (coroutines TS) decltype (since C++11) default(1) delete(1) do double dynamic_cast else enum explicit export(1) extern(1) false float for friend goto if import (modules TS) inline(1) int long module (modules TS) mutable(1) namespace new noexcept (since C++11) not not_eq nullptr (since C++11) operator or or_eq private protected public register(2) reinterpret_cast requires (since C++20) return short signed sizeof(1) static static_assert (since C++11) static_cast struct(1) switch synchronized (TM TS) template this thread_local (since C++11) throw true try typedef typeid typename union unsigned using(1) virtual void volatile wchar_t while xor xor_eq

上边一个表格是c关键字,下面一个表格为c++关键字

  • (1) - meaning changed or new meaning added in C++11. Note: the keyword export is also used by Modules TS.
  • (2) - meaning changed in C++17.

c++关键字分类:

数据类型:void,int,char,float,double,bool,w_char 类型定义:struct,union,enum,class,typedef 常量值:true,false 类型修饰符:long,short,singed,unsigned 类型限定符:const,volatile,restrict 存储说明符:auto,register,static,extern,thread_local,mutable 其它修饰符:inline,asm 循环控制:for,while,do 跳转控制:break,continue,return,goto 分支结构: if,else,switch,case,default 内存管理:new, delete 运算符:sizeof,and,and_eq,bitand,bitor,compl,not,not_eq,or,or_eq,xor,xor_eq 访问限定符:this,friend,virtual,mutable,explicit,operator 类访问修饰符:private,protected,public 模板:template,typename 命名空间:namespace,using 异常处理:throw,try,catch