重学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 扩展时,您可在程序中使用上面列出的关键字。 为了符合语言标准一致性,其中大多数的关键字是以双下划线开头的。 dllexport
、dllimport
、naked
和 thread
这 4 个关键字除外,它们只与 __declspec
一起使用,不需要前导双下划线。 为了向后兼容,支持其余的关键字的单下划线版本。
请参阅
关键字 ( 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) |
---|---|---|---|
上边一个表格是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