预处理详解

1.预定义符号

预定义符号用于预处理期间,便于预处理的进行。
预定义符号是由编译器预先设置好的特殊标识符,用于表示特定的信息,如编译器版本、目标平台信息、编译选项等。在C语言中,常见的预定义符号包括:
__LINE__:表示当前源码行号。
__FILE__:表示当前源文件名。
__DATE__:表示文件被编译的日期。
__TIME__:表示文件被编译的时间。
__FUNCTION__:表示进行编译的函数。
__STDC__:如果编译器遵循ANSI C,其值为1,否则未定义。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	printf("%s\n", __FILE__);
	printf("%d\n", __LINE__);
	printf("%s\n", __DATE__);
	printf("%s\n", __TIME__);
	printf("%s\n", __FUNCTION__);

	return 0;
}

在这里插入图片描述
在这里插入图片描述

2.#define定义常量

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define a 100
#define student  "lishi"
#define DEBUG_PRINT printf("file:%s\tline:%d\t \
 date:%s\ttime:%s\n" ,\
 __FILE__,__LINE__ , \
 __DATE__,__TIME__ ) 
int main()
{
	char arr[] = student;
	int b = a;
	printf("%d\n", b);
	printf("%s\n", arr);
	DEBUG_PRINT;
	return 0;
}

每⾏的后⾯都加⼀个反斜杠(续⾏符)。

3.#define定义宏

#define MUL(x) x*x
#define ADD(y) y+y
int main()
{
	int n = 5;
	printf("%d\n", MUL(n));
	printf("%d\n", MUL(n + 1));//5+1*5+1
	printf("%d\n", ADD(n));
	printf("%d\n", 10 * ADD(n));//10*5+5
	return 0;
}

在这里插入图片描述
在使用中注意()
所以⽤于对数值表达式进⾏求值的宏定义都应该⽤这种⽅式加上括号,避免在使⽤宏时由于参数中的操作符或邻近操作符之间不可预料的相互作⽤。

#define MUL(x) (x*x)
#define ADD(y) ((y)+(y))
int main()
{
	int n = 5;
	printf("%d\n", MUL(n));
	printf("%d\n", MUL(n + 1));
	printf("%d\n", ADD(n));
	printf("%d\n", 10 * ADD(n));
	return 0;
}

在这里插入图片描述

4.宏和函数的区别

带副作用的宏参数

int max(int z, int d)
{
	return((z++) > (d++) ? (z++) : (d++));

}
#define MAX(x,y) ((a++)>(b++)?(a++):(b++))
int main()
{ 
	int a = 1;
	int b = 5;
	int z = 1;
	int d = 5;
	MAX(a, b);
	printf("%d\n", a);
	printf("%d\n", b);//(b++)会执行
	int x=max(z, d);
	printf("%d\n", x);
	return 0;
}

在这里插入图片描述
宏和函数的对比:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值