c语言预处理相关知识

1.翻译环境与执行环境

翻译环境:将高级程序语言转化为机器语言的环境

执行环境:执行转换为机器语言的环境

2.翻译环境过程

1.预处理:头文件的包含;define的定义符号替换;删除注释     -----文本操作

2.编译:把c语言代码转换为汇编代码,语法分析;词法分析;符号汇总;语义分析

符号汇总:汇总全局符号(变量名和函数名都要)例如:main()函数

3.汇编:把汇编代码转换为机器语言,生成目标代码;并且形成符号表

形成符号表:不同的源文件所产生的全局符号会被加上一个地址并且打包成一个符号表,若有效则定义存在的地址,无效则定义不存在的地址

以上三步可统称为编译,它是将源文件通过编译器转化为目标文件

4.链接:合成段表;合并符号表,最后放到执行文件中去

合成符号表,将有效的符号合成(所以在链接时会判断函数是否有效)

3.预处理阶段

1.预定义符号

__FILE__:当前源文件的地址
__LINE__:执行代码的行号
__DATE__:当前日期
__TIME__:当前时间
__STDC__:编译器是否遵循ANSI C,是返回1

2.#define

1.#define定义的标识符
#define MAX 100

意指定义的东西后面所有都代替掉,所以一般不加 " ; "

2.#define定义的宏

#define name( parament-list ) stuff
括号紧贴宏名,并且为了使得附和设计的优先级必须在设计宏时注意括号的添加

注意:对于宏,不能出现递归;预处理器搜索#define定义的符号的时候,字符串常量的内容并不被搜索
宏参数传入时,别带有副作用,会导致计算不可控

3.#undef

使得存在的宏定义失效

4.宏和函数对比

宏:参数无限制,所以可以将类型也传入宏体中,功能性广。但是,类型不限制可控性差

函数:不能传入类型,但是保证了参数的类型可控

宏:执行时只需要替换便可,所以操作时间短

函数:需要生成堆栈,读取,返回函数一系列操作花费时间

宏:不能递归

函数:可以递归

宏:不能调试

函数:可以调试

宏:适用于短的语句使用

函数:使用于长的语句使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈里沃克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值