宏定义

本文探讨了宏定义、内联函数以及条件编译在C语言编程中的作用和区别。宏定义在预处理阶段进行替换,可能导致类型问题;内联函数兼顾函数特性和宏的效率;条件编译则用于根据特定条件启用或禁用代码块。示例展示了MAX宏和内联函数在求最大值时的使用,以及DEBUG宏如何控制debug打印。
摘要由CSDN通过智能技术生成

宏定义的规则 :在预处理阶段由预处理器进行替换,这个替换是原封不动的替换
宏定义替换会递归进行,知道替换出来的值不再是一个宏
宏定义分为三部分: #define 宏名 剩下的部分

#define GGG (36524243012) //可行,可是数字太大 默认为int类型
#define GGG (36524243012UL) //转成无符号数字

带参宏和带参函数的区别(宏定义的缺陷)
宏定义是在预处理期间处理的,而函数是在编译期间处理的。
宏定义最终是在调用宏的地方把宏体原地展开,而函数是在调用函数处跳转到函数中去执行,执行完后再跳转回来

#include <stdio.h>

#define MAX(a,b) ((a)>(b) ? (a):(b))

int  max(int a,int b)
{
	if(a>b)
		return a;
	else
		return b;
}
int main(void)
{
	int a=3,b = 5,c = 0;
	c = MAX(a,b);
	printf("%d\n",c);
	return 0;
}

内联函数和inline关键字
内联函数通过函数定义前加inline关键字实现
内联函数本质上是函数,所以有函数的有点(内联函数是编译器负责处理的,编译器可以帮我们做参数的静态类型检查),但是他说同时有带参宏的有点(不用调用开销,而是原地展开)
当我们函数内函数体很短的时候,我们有希望利用编译器的参数类型检查来拍错,我们还希望没有调用开销,所以最适合使用内联函数

宏定义来实现条件编译(#define #undef #ifdef)

#include<stdio.h>
#define DEBUG
#undef DEBUG //把上面符号去掉
#ifdef DEBUG  //如果上面定义了DEBUG
#define debug(x)	printf(x)  //执行这个宏定义 
#else  //否则执行下面宏定义
#define debug(x)
#endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值