【C上分之路】第四篇:C语言关键字、分类

冲

关键字

关键字是C语言的词汇,它们对C而言比较特殊,是已经在C标准库中定义过的字,这类词汇不能作为程序中的标识符(变量名),若把关键字作为变量名,编译器会将其视为语法错误

autoexternshortwhile
breakfloatsigned_Alignas
caseforsizeof_Alignof
chargotostatic_Atomic
constifstruct_Bool
continueinlineswitch_Complex
defaultinttypedef_Generic
dolongunion_Imaginary
doubleregisterunsigned_Static_assert
elserestrictvoid_Noreturn
enumreturnvolatile_Thread_local

*加粗为C11标准新增的关键字

关键字分类

C标准关键字主要可以分为流程关键字和数据类型关键字

数据类型关键字可以分为:基本类型关键字、类型修饰关键字、复杂类型关键字、存储级别关键字

流程关键字可以分为:跳转结果关键字、分支结构关键字、循环结构关键字

关键字

基本类型关键字

void

void:不对应具体的值,只有注释和限制程序的作用,主要是对函数返回的限定和对函数参数的限定,以及声明无类型指针

char

char:表示字符类型数据,实际存储形式为整数

int

int:整型数据,2或4个字节,通常为编译器指定的机器字长

float

float:单精度浮点类型,属于浮点数据类型的一种,小数点后保留6位

double

double:双精度浮点类型,区别于float的另一种浮点数据类型,小数点后保留15-16

类型修饰关键字

short

short:修饰int,2个字节大小,表示短整型数,书写时可省略int

long

long:修饰int,4个字节,表示长整型数,书写时可省略int

signed

signed:修饰整数数据,有符号整数类型,整型默认为有符号,书写时不做强调时可省略

unsigned

unsigned:修饰整数数据,无符号整型数据,只用于表示非负整数

复杂类型关键字

struct

struct:用来声明复杂类型struct,struct是一种包含多种变量和数组的集合

union

union:用来声明复杂类型union,union中所有成员共用一块内存

enum

enum:用来声明复杂类型enum,用于保存用户自定义的值

typedef

typedef:用于声明类型别名,为数据类型(包括复杂类型)定义一个新的名字,编码更加方便

typedef关键字 typedef验证
typedef与#define的区别

#define:为宏定义指令,是C语言预处理指令中的一种,用一个标识符来表示一个字符串,在预编译处理时将代码中的出现的标识符全部替换成表示的字符串,预处理程序不会对字符串做任何检查,只会简单的进行文本替换

宏定义形式:#define 宏名 字符串
#:表示这个为预处理指令,所有预处理指令都以#开头
宏名:为标识符的一种,习惯都以大写字母,便于与变量进行区分
字符串:可以是数字、表达式、if语句、函数
#define用法
  1. 在预处理将程序展开时,以字符串取代宏名在源程序中进行展开
  2. 宏定义不是说明或者语句,不需要加分号,若加上分号,则替换时也要加上分号";"
  3. 宏定义必须写在函数之外,作用域为宏定义起到源程序结束,要终止作用域,应使用#undef指令
  4. 代码中的宏名被双引号包围,则预处理程序不会对其进行处理
  5. 宏定义允许嵌套
  6. 可用宏定义表示数据类型
区别

#define发生在预处理阶段,由预处理器对其进行简单的文本替换;typedef是发生在编译阶段,由编译器对原数据类型取别名,作为一种新的数据类型,

1、#define可以宏类型别名进行扩展,而typedef不行

#define发生在预处理阶段,预处理阶段不会进行语法检查,所以可以用类型修饰符对宏类型别名进行扩展,只要宏类型别名扩展之后符合语法即可;typedef是产生一个新而完整的数据类型,是不能在进行扩展的

2、连续定义变量时,typedef可以保证变量全为一个数据类型,但#define不能

typedef区别

sizeof

sizeof:得到特定类型或者特定类型变量的大小(占用内存的大小),在编译阶段确认大小,无法统计动态分配的内存大小

sizeof是一个保留关键字,也是一个运算符(单目运算符),取一个对象(数据类型或数据对象)的长度(占用内存的大小)

返回值类型为size_t,在头文件stddef.h中定义,typedef unsigned int size_t,size_t是一种机器相关的无符号类型,它被设计的足够大以便能够表示内存中任意对象的大小

sizeof三种语法形式:
sizeof(object)
sizeof(typename)
sizeof object

存储级别关键字

auto

auto:指定为自动变量,由编译器自动分配和释放,通常在栈上分配

static

static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部

static修饰符可以修饰全局变量和局部变量

static修饰局部变量时,指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次进入和离开作用域时进行创建和销毁,可以在函数调用期间保持局部变量的值

static修饰全局变量时,会使变量的作用域限制在声明他的文件内

全局声明的一个static变量或方法可以被任何函数和方法调用,只要这些方法出现在跟static变量或方法的同一文件中

register

register:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数

register用于定义存储在寄存器中而不是在RAM中的局部变量,即register修饰的变量最大尺寸等于寄存器的大小(通常为一个字),并且没有存储在内存中,所以不能进行一元运算’&’

寄存器只用于需要快速访问的变量,比如计数器,register修饰变量不一定意味着该变量一定被存储到寄存器中,只是建议编译器将该变量会存储在寄存器中,这具体取决于硬件和实现的限制

extern

extern:指定变量为外部变量,即在另外的目标文件定义,可以认为是约定由另外文件声明

extern用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的,extern修饰符通常用于当有两个或多个文件夹共享相同的全局变量或函数,extern是用来在另一个文件中声明一个全局变量或函数

const

const:与volatile合成为"cv特性",指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程修改)

const限定符用来限制一个变量,表示这个变量不能进行更改,这样的变量也称为常量

当编译时初始化的方式来定义一个常量const,编译器在编译过程中把用到该变量的地方替换成对应的常量值

const可以用来定义常量、修饰函数参数、修饰函数返回值,被const修饰的东西,都受到强制保护,可以预防其他代码无意识进行修改,提高了程序的健壮性

volatile

volatile:与volatile合成为"cv特性",指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值

跳转结构关键字

return

return:用于函数体,返回特定值

continue

continue:结束当前循环,开始下一轮循环

break

break:跳出当前循环或者switch结构

goto

goto:无条件跳转语句

分支结构关键字

if

if:条件语句

else

else:条件语句否定分支

switch

switch:开关语句

case

case:开关语句中的分支标记

default

default:开关语句中的"其他"选项

循环结构关键字

for

for:for循环结构

do

do:do循环结构

while

while:while循环结构,表达式为真则继续循环,为假则跳出循环

总结

关键字是C语言的词汇,它们对C而言比较特殊,是已经在C标准库中定义过的字,关键字分类和具体作用,很多关键字会后续会详细补充

赶紧学习起来吧!我是一个正在努力找回自我的人,希望能和一起学习的人成长,有错误的地方请各位大佬帮忙指正,如果觉得有帮助就点个赞当作对我的一个小肯定❤,peace&love

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值