关键字 32个

编译器预先定义一定意义的字符串

杂项

return

sizeof

不是函数,编译器实现的,而不是库中有该函数

数据类型

资源属性中大小限定 具体大小和编译器有关

char

硬件操作最小单位-bit–0/1 软件操作最小单位-8bit == 1B char被当作硬件处理最小单位 ASCII码表 8bit == 256

int

编译器最优的处理大小: 系统单周期,接受的最大处理单位,int 32bit 4B int 16bit 2B 2int

整型常量

char a = 300; 300l 300L后面加l

进制表示

int a = 010; 开头0表示8进制 int a = 0x10; 开头0x表示16进制

long short

数据类型组合标志 long-64 short-16

unsigned signed

数据类型限制标志 默认有符号signed 内存最高字节是否作为符号位

float double

浮点数与整型内存表示形式不同 float 4B double 8B 非常消耗内存空间 1.0 1.1 double 1.0f float

void

声明标志,不是使用标志,语义符

自定义数据类型

struct(结构体)

元素之间的和

基本语法

//告知空间,没有申请内存
//声明有顺序,申请内存前一个尾后一个头
struct myabc{
    unsigned int a;
    unsigned int b;
    unsigned int c;
    unsigned int d;
};
//使用
struct myabc mybuf

union(共用体)

公用起始地址的一段内存 技巧性代码

基本语法

//声明,
union myabc{
    char a;
    int b;
};
//使用
//abc使用表示abc这样类型的内存
union myabc abc;
//int使用表示int这样类型的内存
int a;

enum(enumerate枚举)

被命名的整数常数的集合 和define一样,只是集合了起来

//宏定义
#define MON 0
#define TUE 1
#define WED 2

//枚举典型写法
enum{MOD,TUE,WED};
//命名,默认从0开始赋值,依次加一,指定值后同理
enum abc{MOD,TUE,WED}; //相当于宏定义
enum abc{MOD = 100,TUE,WED}; //相当于宏定义

typedef

别名,常定义 xxx_t

int a; //a是一个int类型变量
typedef int a_t;//a是一个int类型外号
a_t mysize=10;

逻辑结构

CPU顺序执行程序 分支 –> 选择 循环

if-else

if(条件表达式)
	xxx
else
	xxx

switch-case

switch(整形变量) //不能浮点数
case: xxx;
	break;
...
default: ;break;

do,while,for

for 次数 while 条件 do 先执行

continue,break,goto

continue 继续 break tiaochu goto 尽量不要用,函数内部跳转

类型修饰符

CPU 寄存器 内存 寄存器在CPU里,程序读写寄存器速度大于读取内存的速度 资源属性中位置限定 内存有的可读可写,有的只读

auto

  • auto常省略,表示存储在可读可写空间
  • 区域如果在{}里表示栈空间
auto char a;
auto long a;

register

  • 可读不可写
  • 限制变量定义在寄存器上的修饰符
  • 定义一些快速访问变量
  • 编译器会尽量安排CPU寄存器存放,但是如果寄存器不足还会存在存储器中
  • &(看地址的)对register不起作用
register

static 静态

应用场景

修饰三种数据
函数内部变量
int fun()
{
	int a; ==> static int a
}
函数外部变量
int a; ==> static int a;
int fun(){}
函数修饰符

工程用的多

int fun(); ==> static int fun();

extern 外部申明

const 常量定义

只读变量 设计初衷是不能变的,但是还是可以变(直接改内存?)

const int a = 100;
a = 200;//编译器报错

volatile

告知编译器方法的关键字,不优化编译

int a = 100;
while(a == 100);
mylac();

编译器

f1: LDR R0, [a]
f2: CMP R0, #100
f3: JMPeq f1  -优化-> JMPEQ f2 //R0赋为100优化为while直接判断100,但数值可被外部改变的话就会出问题
f4: mylcd();