C语言宏定义

预处理命令:

1、必须以#开头

2、通常位于程序开头部门

编译器在对C程序或Object-C程序编译之前,会对这些预处理命令进行处理,然后将这些预处理结果与源文件一起编译。


#define、#undef执行宏定义

#define:作用是为字符串起一个名字

#undef :提前结束宏定义

注意:

宏定义不是C语句,不要用=给红名称赋值,无需分好结束;

编译器处理宏定义只是进行“查找”、“替换”,将红名称替换为对应的字符串。


宏定义还可以引用另一个宏,形成嵌套替换的宏


宏定义还可以带参数

#define 宏名称(参数列表) 字符串


#include <stdio.h>
#define PI 3.1415926
#define TWO_PI PI*2

#define GRITH(r) PI * 2 * r
//宏定义有参数时最好加括号
#define GRITH2(r) PI * 2 * (r)
#define AREA(r) PI * (r) * (r) 

void yuchulitest1_1(){
	double radius;
	scanf("%lg", &radius);
	printf("园周长为:%g\n", TWO_PI*radius);
	printf("园面积为:%g\n", PI*radius*radius);
	printf("\n\n");
	//r为3+1时,GRITH(r) 为 3.1415926 * 2 * 3 + 1
	printf("RTITH(3+1)园周长:%g\n", GRITH(3+1));
	printf("RTITH2(3+1)园周长:%g\n", GRITH2(3+1));
	printf("AREA(3+1)园面积:%g\n", AREA(3+1));
}

//结束宏定义
#undef PI
#undef TWO_PI


还可以通过是否定义某个宏来进行条件编译:#ifdef、#ifndef、#endif

还可以通过判断表达式或已有宏表达式来决定是否编译指定语句:#if、#elif、#else、#endif

#include <stdio.h>

#define IPAD
#define DEBUG
#define AGE 26

void yuchulitest2_1(){
//是否定义某个宏
#ifdef IPAD
	int a = 5;
	int b = 9;
	printf("交换前a=%d,b=%d\n", a,b);
	int tmp = a;
	a = b;
	b = tmp;
	printf("交换后a=%d,b=%d\n", a,b);
#else
	printf("没有定义IPAD\n");
#endif

#ifndef DEBUG
	printf("没有定义DEBUG\n");
#else
	printf("定义了DEBUG\n");
	printf("定义了DEBUG\n");
#endif

//条件编译,对宏进行判断
#if AGE > 60
	printf("老年人\n");
#elif AGE + 20> 40
	printf("中年人\n");
#elif AGE > 20
	printf("青年人\n");
#else
	printf("未成年\n");
#endif
}

可以通过定义DEBUG宏来控制是否执行输出语句。

可以通过定义IPAD宏来控制是否编译IPAD相关代码。

程序中以后经常需要修改的值可以定义为宏,避免程序中硬编码这些值。


#include:导入其他源程序到当前源程序代码的指定位置。

需要我们自行判断是否重复导入。

例如A导入B和C,而B里面也导入了C,这样A就重复导入了C,应该只导入B就可以了。

导入自己定义的源程序用“”,导入系统程序用<>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值