C_C++嵌入式知识点

1、程序编译的四个阶段

阶段 功能
预处理 (引用头文件、宏定义、条件编译)
编译 进行词法分析和语法分析,确认所有指令符合语法规则后,将其翻译成汇编代码。
汇编 把汇编代码翻译成目标机器指令,生成一系列目标文件。
链接 将目标文件按照链接规则链接成可执行文件。分为静态链接和动态链接,静态链接把静态链接库的代码拷贝到可执行文件中;动态链接不把链接库的代码拷贝到可执行文件中,而是在执行时才到动态库中找到对应代码。

2、volatile关键字

告诉编译器变量可能会意想不到地发生改变,在编译时不能对该变量进行优化,每次读取或者存取都要直接从变量地址进行操作。

举例:

1、硬件的状态寄存器

2、中断服务函数中访问到的非自动变量(全局变量、静态变量)

3、多线程中的共享变量

3、const修饰问题

const表示常量不可修改,定义常量时必须初始化。

const int N = 100;	//定义常量N
N =50;	//错误,常量不可修改
const int n;	//错误,常量定义时必须初始化

const int *p(表示指针p指向的值不能修改,指针p可修改)

int const *p(同上)

int *const p(表示指针p不可修改,指向的值可修改)

const int *const p(表示指针p和指向的值都不可修改)

const修饰函数指针返回值,接收返回值的指针类型也必须是const。

const修饰函数指针形参,表明函数内不能对该指针指向的值进行修改;而如果形参是值传递,则不需要用const进行修饰。

有以下情况:

#define INTPTR1 int*
typedef int* INTPTR2;
const INTPTR1 p1;	//p1为常量指针,指向的值不能修改,指向可修改
const INTPTR2 p2;	//p2为指针常量,指向的值可修改,指向不可修改

4、static修饰问题

static变量初始化一次的原因:储存在静态区,初始化后变量不会被销毁,因此不会再初始化。

static修饰的局部变量,储存在静态区,只能在定义该变量的函数内使用,定义语句只执行一次,可多次赋值。

static修饰全局变量,储存在静态区,只能在定义的源文件中使用。

static修饰函数,只能在定义的源文件中使用。

5、预处理器标识#error

编译程序时只要遇到#error就会停止编译并报错。

#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值