十三、C语言预处理

十三、C语言预处理     

13.1 从.c文件编译到.exe文件

预编译阶段进行代码的文本操作,例如:#include头文件的包含、删除注释、#define宏定义替换

test.c经过预编译产生test.i

编译阶段将C语言代码编译成汇编代码,操作有:语法分析、词法分析、语义分析、符号汇总

test.i经过编译阶段产生test.s

汇编阶段形成符号表,并将汇编翻译成二进制指令 ,test.s经过汇编阶段生成test.o

13.2 预定义符号

 

13.3预编译符号 

13.3.1 #define

1.定义标识符

2.宏定义

带参宏定义

 注意:宏是将参数进行替换而不是传参

#define MUL(x) x*x
void main()
{
	int a = MUL(5+1);
	printf("%d", a);
}

代码运行结果是11而不是36,因为MUL(5+1)是被替换成5+1*5+1,所以得到5+5+1=11

所以用宏进行数值运算时最好带上括号 

13.3.2 #

将宏定义中的参数转变为字符串,如: 

#define print(x) printf("the value of "#x" is %d",x)
void main()
{
	int a = 10;
	print(a);
}

 此时printf里的#x等价于"a",打印的结果是

13.3.3 ##

将 ## 两端的符号拼接成一个符号

#define print(x,y) printf("the value is %d",x##y)
void main()
{
	int abcd = 10;
	print(ab,cd);
}

#define宏定义和函数很相似,宏的优势:1.宏的效率更高.因为调用函数需要传参,返回等等动作,但#define在预编译阶段就会被编译器全部替换,没有多余的动作过程,代码运行更快;2.宏可以不考虑数据类型,甚至可以传类型

宏的劣势:

13.4命令行定义 

13.5条件编译指令

13.6 #include

 #include可以使别的文件被编译,编译时首先删除#include这代码,然后用相应文件内容替换

头文件包含方式 

头文件被重复引用的解决方法:

1.用条件编译

#ifndef __TEST_H__
#define __TEST_H__


#endif

 2. #pragram once

#pragram once

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值