C语言收尾 预处理相关知识

admin2024-05-15  0

一. 预处理详解

1.1 预定义符号

这些预定义符号都是语言内置的

我们来使用下上面的语句

C语言收尾 预处理相关知识,第1张

 这样我们就可以知道 函数在什么时间 什么地点 发生了什么

1.2 #define 定义标识符号

define可以定义符号
例如

#define MAX 1000
int main()
{
	int m = MAX;
	//int m = 1000;
	printf("%d\n", m);
	return 0;
}

在预处理时其实MAX就变成了1000

这里注意的是define是不能加分号的 否则替换到源文件里面会出现各种问题

1.3 #define 定义宏

我们举个例子

#define SQUARE(x) (x)*(x)
int main()
{
	printf("%d\n", SQUARE(5 + 1));//不要吝啬括号,不加括号有时候可能导致优先级的错误
	printf("%lf\n", SQUARE(5.0));//宏定义不限制类型
	return 0;
}

这里 它就是一个宏 它允许把参数替换到文本中去 这种实现通常称为宏

我们在定义宏的时候一定要注意括号

#define DOUBLE(x) ((x)+(x))
int main()
{
	printf("%d\n", 10 * DOUBLE(3));//最好能把整体也加上括号
	return 0;
}

这题如果不在宏定义时加上整体的一个大括号就会导致输出结果的错误 计算成33

但实际上我们的要求是60

这里还有要注意的一点 注释中的宏是不会被替换的

1.4 #define 的副作用

我们写出以下代码

#define Max(x,y)((x)>(y))?(x):(y)

int main()
{
	int a = 5;
	int b = 8;
	int c= Max(a++, b++);
	printf("%d\n", a);
	printf("%d\n", b);
	printf("%d\n", c);
	return 0;
}

这里输出结果如下

C语言收尾 预处理相关知识,第2张

我们可以发现 其实b是++了两次的

这里就是宏的一个小缺陷

1.5 宏和函数对比

宏通常用于比较简单的运算

例如求两个数中的较大值

为什么这样子呢?

因为

当然宏也有缺点

 以上便是本文所有内容了,如有错误请各位大佬不吝赐教,感谢留言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!