程序的编译及预处理

这篇博客探讨了C语言中的编译预处理过程,其中预处理包括宏定义,如无参宏和带参宏。无参宏定义允许用标识符表示字符串,简化代码并提高可读性。带参宏定义则允许进行参数替换,例如在计算平方的例子中。博客还提到了预处理的一些特点,如宏可以嵌套,以及预处理与函数的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译与预处理

编译预处理是指C语言对源程序在正常编译之后先执行源程序中的预处理命令。预处理后源程序在被正常编译,从而得到目标代码。预处理是编译的一部分,是编译中最先执行的部分。
预处理
在C语言中带#的行都是预处理命令,后面不加“;”结束符。多数编译的预处理都放在程序头,也可以根据需要放在的任何位置。
宏定义
在C语言中允许用一个标识符来表示一个字符串,称为宏。宏有有参宏和无参宏。
无参宏定义
#define 标识符 字符串
Eg:#define IP 7.155488995(减少程序的重复书写,见名知义,提高程序的可读性)
1.用宏定义命令定义符号常量时,通常使用大写,便于区别变量。
2.预处理对符号常量的处理只是简单替换,不做语法检查,只能在正式编译中检查出错误。
3.宏可以嵌套
终止宏命令
#undef 标识符
Eg:
#deine M 50

#undef M

#define _CRT_SECURE_NO_WARNINGS 1
#include"stdio.h"
#define M (y*y+3*y)
void main()
{
	int s, y;
	printf("intput a number");
	scanf("%d", &y);
	s = 3 * M + 4 * M + 5 * M;
	printf("s=%d\n", s);
}

带参宏定义
#define 宏名 字符串
#define SQ(x) (x)(x)
SQ是宏名,x是形参,字符串是(x)
(x),a=SQ(5);5是实参,替换宏体中出现中的形参x。替换后a=(5)*(5).
Eg:求三角形的面积

#include<math.h>
#define S(a,b,c)(a+b+c)/2
#define Srt(a,b,c)S(a,b,c)*(S(a,b,c)-a)*(S(a,b,c)-b)*(S(a,b,c)-c)
#define Area(a,b,c) sqrt(Srt(a,b,c))
void main()
{
	int x = 44, y = 67, z = 30;
	float area;
	area = Area(x, y, z);
	printf("area=%.2f\n", area);

}

带参宏与函数的本质区别:
1.定义形式不同
2.处理时间不同
3.处理机制不同
4.时间和空间的开销不同
5.带参的宏定义命令设法获得多个结果,而函数的返回值只有一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值