文章目录
1、C语言标准发展史
- C89 也称为 ANSI C
- C99
- C11
2、数据类型
2.1、ARM架构(含Cortex-M系列)数据类型
不同的处理器架构代表的int型的位数是不同的
2.2、 头文件stdint.h对数据类型的定义
stdint.h是C99标准中引进的一个标准C库的头文件,目前大部分单片机C编译器均支持,如IAR和MDK
2.3、 推荐变量定义方式
例如声明一个八位无符号整数即unsigned char
,我们通常建议采用uint8_t data
,即采用C99标准的定义方式。
至于为啥要用typedef的方式重定义数据类型呢?目的如下:
最基础的标准C语言规定了int,unsigned char,long
等数据类型,但是很不幸的是int
在如**8位单片机(51单片机)C编译系统中是16位的整数,而在32位单片机(STM32)**C编译系统中是32位。
于是为了规避错误使用和理解的风险,我们用typedef重定义使数据类型变得更加清晰明了。
3、局部变量和全局变量
3.1、 局部变量
在函数内部被定义,且只在本函数范围内有效。也就是说只能在本函数中调用它们,在此函数外不能被使用的变量被称为局部变量
3.2、全局变量
所以在工程中,尽量少用全局变量。
3.3、 全局变量的缺点
3.4、变量的存储类别
变量的存储分为两种方式
- 静态存储:在程序运行期间由系统分配固定的存储空间
- 动态存储:在程序运行期间根据需要进行动态的分配存储空间
3.5、 用static声明局部或者全局变量
有时候希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用结束时的值。这时可以使用关键字static进行声明。
从以上描述中可以看出用static声明的局部变量被存放在静态存储区中。
4、堆和栈
栈(stack)空间,用于局部变量,函数调时现场保护和返回地址,函数的形参。
堆(heap)空间,主要用于动态内存的分配,也就是说用malloc,calloc,relloc等函数分配的变量空间是在堆上。