C语言系列——关键字
2014-12-29 16:40
197 查看
从接触C语言到现在也有好几年了,这个在阅读ESC32源码的时候感觉自己差的还是很多的。里面运用的大量的宏定义,这样就加大的阅读的难度,但是这样就大大方便的维护,这应该是一个平衡问题吧。今天就C语言关键字简单的总结一下,试问:C语言有多少个关键字呢?
在弄清上面这些关键字之前首先需要明白两个概念:什么是定义?什么是声明?它们有何区别?
定义:是(编译器)创建一个对象,为这个对象分配一块内存并给它取上一个名字,这个名字就是我们经常所说的变量名。
声明:1.告诉编译器,这个名字已经匹配一块内存上了,
2.告诉编译器,这个名字我先预定了,别的地方不能用它来作为变量名了。
定义跟声明最重要的区别:定义创建了对象并为这个对象分配了内存,声明没有分配内存。
1> 最快的关键字——register
Register:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中为不是通过内存寻址访问,它声明的变量在程序中使用频率较高。
虽然寄存器的速度非常快,但是使用register修饰符也有限制的:register变量必须是一个单个的值,并且其长度用应小于或等于整型长度。而且register变量不能用取址运算符“&”来获取register变量的地址
2> 最冤枉的关键字——sizeof
sizeof是关键字不是函数,(我一直认为是函数,没想到确实关键字)为了证明它是关键字,我们借助编译器确 定它的身份,看下面的例子:
注意:这个关键字更运行环境,硬件平台有关,所以判断数值之前必须考虑硬件平台,最好的办法就是基于相应的平台加以测试。
3> 最易变的关键字——volatile
volatile是易变的、不稳定的意思。用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其他线程等,遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。
4> 最会带帽子的关键字——extern
extern,外面的、外来的意思。extern可以置于变量或者函数前,以标示变量或函数的定义在别的文件中,下面的代码用到的这些变量或函数是外来的,不是本文定义的,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
有些是我以前就用到的,只是没有深究,像基本数据类型的关键字这些就不用说了,基本会编程的人都懂。其中还有几个关键字如:struct、enum、typedef等这些也大量遇到,尤其这一些大型的程序中这些定义太常见,可以自己还是不敢用,主要是没有深入理解。
关键字 | 意义 | ||
auto | 声明自动变量,缺省使编译器一般默认为auto | break | 跳出当前循环 |
int | 声明整形变量 | register | 声明寄存器变量 |
double | 声明双精度变量 | const | 声明只读变量 |
long | 声明长整型变量 | volatile | 说明变量在程序执行中可被隐含改变 |
char | 声明字符型变量 | typedef | 用以给数据类型去别名 |
float | 声明浮点型变量 | extern | 声明变量是在其他文件中声明 |
short | 声明短整型变量 | return | 子程序返回语句 |
signed | 声明有符号类型变量 | void | 声明函数无返回值或无参数,声明空类型指针 |
unsigned | 声明无符号类型变量 | continue | 结束当前循环,开始下一轮循环 |
struct | 声明结构体变量 | do | 循环语句的循环体 |
union | 声明联合体数据类型 | while | 循环语句的循环条件 |
enum | 声明枚举类型 | if | 条件语句 |
static | 声明静态变量 | else | 条件语句否定分支 |
switch | 用于开关语句 | for | 一种循环语句 |
case | 开关语句分支 | goto | 无条件跳转语句 |
default | 开关语句中的“其他分支” | sizeof | 计算机对象所在内存空间大小 |
定义:是(编译器)创建一个对象,为这个对象分配一块内存并给它取上一个名字,这个名字就是我们经常所说的变量名。
声明:1.告诉编译器,这个名字已经匹配一块内存上了,
2.告诉编译器,这个名字我先预定了,别的地方不能用它来作为变量名了。
定义跟声明最重要的区别:定义创建了对象并为这个对象分配了内存,声明没有分配内存。
1> 最快的关键字——register
Register:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中为不是通过内存寻址访问,它声明的变量在程序中使用频率较高。
虽然寄存器的速度非常快,但是使用register修饰符也有限制的:register变量必须是一个单个的值,并且其长度用应小于或等于整型长度。而且register变量不能用取址运算符“&”来获取register变量的地址
2> 最冤枉的关键字——sizeof
sizeof是关键字不是函数,(我一直认为是函数,没想到确实关键字)为了证明它是关键字,我们借助编译器确 定它的身份,看下面的例子:
注意:这个关键字更运行环境,硬件平台有关,所以判断数值之前必须考虑硬件平台,最好的办法就是基于相应的平台加以测试。
3> 最易变的关键字——volatile
volatile是易变的、不稳定的意思。用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其他线程等,遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。
4> 最会带帽子的关键字——extern
extern,外面的、外来的意思。extern可以置于变量或者函数前,以标示变量或函数的定义在别的文件中,下面的代码用到的这些变量或函数是外来的,不是本文定义的,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
有些是我以前就用到的,只是没有深究,像基本数据类型的关键字这些就不用说了,基本会编程的人都懂。其中还有几个关键字如:struct、enum、typedef等这些也大量遇到,尤其这一些大型的程序中这些定义太常见,可以自己还是不敢用,主要是没有深入理解。
相关文章推荐
- C语言系列——关键字二
- C语言基础系列-C语言中的32个关键字-02
- C语言基本功教程系列 高效无错的内存访问
- C语言中static关键字的常见用法及举例
- C语言基本功教程系列 循环
- 【我解C语言面试题系列】005 按位反转字符问题
- 【我解C语言面试题系列】007 运算符优先级问题
- 【我解C语言面试题系列】005 按位反转字符问题
- C语言基本功教程系列 if 语句
- C语言之关键字、保留字
- 【我解C语言面试题系列】004 数组的循环右移问题
- spg系列c语言开发---改变 sprite 的帧的函数
- C语言 static关键字解析
- 【我解C语言面试题系列】002 局部变量和全局变量小结?
- 【我解C语言面试题系列】003 死循环格式问题小结?
- 【我解C语言面试题系列】001 static有什么用途?
- C语言的关键字(13)
- 数据结构C语言实现系列——队列
- C语言基本功教程系列 快速的函数调用
- 【我解C语言面试题系列】006 按位反转整数问题