【嵌入式——C语言】编译过程

C语言的编译过程

预编译

将.c中的头文件展开,宏展开生成的文件是.i文件

编译

将预处理生成的.i文件生成.s汇编文件

汇编

将.s汇编文件生成.o目标文件

链接

将.o文件链接成目标文件

预处理

include

  • #include<> :在系统指定的路径下找头文件;
  • #include “”:先在当前目录下找头文件,找不到再到系统指定路径下找头文件;

define

define是定义宏的关键字

不带参的宏

#define PI 3

作用范围:从定义的地方到本文件的末尾

#undef PI //终止PI的使用

带参的宏

#define S(a,b) a*b

int num = S(2,4);

带参宏和带参函数的区别

  1. 带参宏被调用多少次就会展开多少次,执行代码的时候没有函数调用的过程,不需要压栈弹栈,所以带参宏是浪费了空间,因为被展开多次,节省时间;
  2. 带参函数代码只有一份,存在代码段,调用的时候去代码段取指令,调用的时候要压栈弹栈,有个调用的过程所以说带参函数浪费了时间,节省了空间;
  3. 带参函数的形参是有类型的,带参宏的形参没有类型名。

选择性编译

定义宏,如下代码:

#define AAA

如果在当前.c文件中定义过AAA 这个宏 就编译段1 否则编译段2,如下代码:

#ifdef AAA 1
#else2 
#endif

如果在当前.c文件中没有定义过AAA 这个宏 就编译段1 否则编译段2,如下代码:

#ifndef AAA 1
#else2 
#endif

如果表达式为真编译段1,否则编译段2,如下代码:

#if 表达式 1
#else2 
#endif
  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值