- 关键字
- 关键字分类
- 基本类型关键字
- void
- char
- int
- float
- double
- 类型修饰关键字
- short
- long
- signed
- unsigned
- 复杂类型关键字
- struct
- union
- enum
- typedef
- typedef与#define的区别
- #define用法
- 区别
- sizeof
- 存储级别关键字
- auto
- static
- register
- extern
- const
- volatile
- 跳转结构关键字
- return
- continue
- break
- goto
- 分支结构关键字
- if
- else
- switch
- case
- default
- 循环结构关键字
- for
- do
- while
- 总结
关键字是C语言的词汇,它们对C而言比较特殊,是已经在C标准库中定义过的字,这类词汇不能作为程序中的标识符(变量名),若把关键字作为变量名,编译器会将其视为语法错误
*加粗为C11标准新增的关键字
关键字分类C标准关键字主要可以分为流程关键字和数据类型关键字
数据类型关键字可以分为:基本类型关键字、类型修饰关键字、复杂类型关键字、存储级别关键字
流程关键字可以分为:跳转结果关键字、分支结构关键字、循环结构关键字
基本类型关键字 voidvoid:不对应具体的值,只有注释和限制程序的作用,主要是对函数返回的限定和对函数参数的限定,以及声明无类型指针
charchar:表示字符类型数据,实际存储形式为整数
intint:整型数据,2或4个字节,通常为编译器指定的机器字长
floatfloat:单精度浮点类型,属于浮点数据类型的一种,小数点后保留6位
doubledouble:双精度浮点类型,区别于float的另一种浮点数据类型,小数点后保留15-16
类型修饰关键字 shortshort:修饰int,2个字节大小,表示短整型数,书写时可省略int
longlong:修饰int,4个字节,表示长整型数,书写时可省略int
signedsigned:修饰整数数据,有符号整数类型,整型默认为有符号,书写时不做强调时可省略
unsignedunsigned:修饰整数数据,无符号整型数据,只用于表示非负整数
复杂类型关键字 structstruct:用来声明复杂类型struct,struct是一种包含多种变量和数组的集合
unionunion:用来声明复杂类型union,union中所有成员共用一块内存
enumenum:用来声明复杂类型enum,用于保存用户自定义的值
typedeftypedef:用于声明类型别名,为数据类型(包括复杂类型)定义一个新的名字,编码更加方便
typedef与#define的区别#define:为宏定义指令,是C语言预处理指令中的一种,用一个标识符来表示一个字符串,在预编译处理时将代码中的出现的标识符全部替换成表示的字符串,预处理程序不会对字符串做任何检查,只会简单的进行文本替换
宏定义形式:#define 宏名 字符串 #:表示这个为预处理指令,所有预处理指令都以#开头 宏名:为标识符的一种,习惯都以大写字母,便于与变量进行区分 字符串:可以是数字、表达式、if语句、函数#define用法
- 在预处理将程序展开时,以字符串取代宏名在源程序中进行展开
- 宏定义不是说明或者语句,不需要加分号,若加上分号,则替换时也要加上分号";"
- 宏定义必须写在函数之外,作用域为宏定义起到源程序结束,要终止作用域,应使用#undef指令
- 代码中的宏名被双引号包围,则预处理程序不会对其进行处理
- 宏定义允许嵌套
- 可用宏定义表示数据类型
#define发生在预处理阶段,由预处理器对其进行简单的文本替换;typedef是发生在编译阶段,由编译器对原数据类型取别名,作为一种新的数据类型,
1、#define可以宏类型别名进行扩展,而typedef不行
#define发生在预处理阶段,预处理阶段不会进行语法检查,所以可以用类型修饰符对宏类型别名进行扩展,只要宏类型别名扩展之后符合语法即可;typedef是产生一个新而完整的数据类型,是不能在进行扩展的
2、连续定义变量时,typedef可以保证变量全为一个数据类型,但#define不能
sizeofsizeof:得到特定类型或者特定类型变量的大小(占用内存的大小),在编译阶段确认大小,无法统计动态分配的内存大小
sizeof是一个保留关键字,也是一个运算符(单目运算符),取一个对象(数据类型或数据对象)的长度(占用内存的大小)
返回值类型为size_t,在头文件stddef.h中定义,typedef unsigned int size_t,size_t是一种机器相关的无符号类型,它被设计的足够大以便能够表示内存中任意对象的大小
sizeof三种语法形式: sizeof(object) sizeof(typename) sizeof object存储级别关键字 auto
auto:指定为自动变量,由编译器自动分配和释放,通常在栈上分配
staticstatic:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部
static修饰符可以修饰全局变量和局部变量
static修饰局部变量时,指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次进入和离开作用域时进行创建和销毁,可以在函数调用期间保持局部变量的值
static修饰全局变量时,会使变量的作用域限制在声明他的文件内
全局声明的一个static变量或方法可以被任何函数和方法调用,只要这些方法出现在跟static变量或方法的同一文件中
registerregister:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数
register用于定义存储在寄存器中而不是在RAM中的局部变量,即register修饰的变量最大尺寸等于寄存器的大小(通常为一个字),并且没有存储在内存中,所以不能进行一元运算’&’
寄存器只用于需要快速访问的变量,比如计数器,register修饰变量不一定意味着该变量一定被存储到寄存器中,只是建议编译器将该变量会存储在寄存器中,这具体取决于硬件和实现的限制
externextern:指定变量为外部变量,即在另外的目标文件定义,可以认为是约定由另外文件声明
extern用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的,extern修饰符通常用于当有两个或多个文件夹共享相同的全局变量或函数,extern是用来在另一个文件中声明一个全局变量或函数
constconst:与volatile合成为"cv特性",指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程修改)
const限定符用来限制一个变量,表示这个变量不能进行更改,这样的变量也称为常量
当编译时初始化的方式来定义一个常量const,编译器在编译过程中把用到该变量的地方替换成对应的常量值
const可以用来定义常量、修饰函数参数、修饰函数返回值,被const修饰的东西,都受到强制保护,可以预防其他代码无意识进行修改,提高了程序的健壮性
volatilevolatile:与volatile合成为"cv特性",指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值
跳转结构关键字 returnreturn:用于函数体,返回特定值
continuecontinue:结束当前循环,开始下一轮循环
breakbreak:跳出当前循环或者switch结构
gotogoto:无条件跳转语句
分支结构关键字 ifif:条件语句
elseelse:条件语句否定分支
switchswitch:开关语句
casecase:开关语句中的分支标记
defaultdefault:开关语句中的"其他"选项
循环结构关键字 forfor:for循环结构
dodo:do循环结构
whilewhile:while循环结构,表达式为真则继续循环,为假则跳出循环
总结关键字是C语言的词汇,它们对C而言比较特殊,是已经在C标准库中定义过的字,关键字分类和具体作用,很多关键字会后续会详细补充
赶紧学习起来吧!我是一个正在努力找回自我的人,希望能和一起学习的人成长,有错误的地方请各位大佬帮忙指正,如果觉得有帮助就点个赞当作对我的一个小肯定❤,peace&love
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)