预处理编译汇编链接

预处理(展开头文件/宏替换/去掉注释/条件编译,形成 *.i 文件)

预处理名称意义
#define宏定义
#undef移除一个宏定义
#include使编译程序将另一源文件嵌入到带有#include的源文件中
#ifdef 和 #ifndef分别代表 如果有定义 和 如果没有定义,是条件编译的另一种方法
#if如果后面的常量表达式是true,则编译 #if 和 #endif 之间的代码
#else#else和 else中一样
#elif和else if 一样
#endif表示 #if 这一个块的结束

语言内置的预定义符号(都是两个下划线 _ _ ,没有空格 )

__ LINE __ 表示正在编译的文件的行号
__ FILE __ 表示进行编译的源文件
__ DATE __ 文件被编译的日期
__ TIME __ 文件被编译的时间
__ STDC __ 判断该文件是不是标准C程序

宏函数

优点

1、提高性能。用于调用函数和从函数返回的代码可能比宏函数用的时间更久

2、宏是类型无关的。在宏定义的时候不用指定参数类型

缺点

1、宏没办法调试
2、每次使用宏的时候,一份宏定义的代码直接插入到程序中,如果宏比较长,则会大幅度的增加程序的长度
3、因为宏与类型无关,所以不够严谨
4、因为运算符优先级的问题,导致程序比较容易出错
5、可读性比较差

这是《C和指针》里面对宏和函数做的总结
在这里插入图片描述

#include

#include <filename>

尖括号是预处理到系统规定的路径下去寻找获得这个文件

#include "filename"

引号是预处理我们自己编写的文件

编译

检查语法,生成汇编,产生*.s文件

汇编

把汇编代码转换成机器语言,生成 *.o文件

链接

静态链接是由链接器在链接时将库的内容加入到可执行程序中的做法。链接器是一个独立程序,将一个或多个库或目标文件(先前由编译器或汇编器生成)链接到一块生成可执行程序。静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。

动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函数的描述信息(往往是一些重定位信息)。仅当应用程序被装入内存开始运行时,在Windows的管理下,才在应用程序与相应的DLL之间建立链接关系。当要执行所调用DLL中的函数时,根据链接产生的重定位信息,Windows才转去执行DLL中相应的函数代码。

静态库和应用程序编译在一起,在任何情况下都能运行,而动态库是动态链接,文件生效时才会调用

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值