【C语言】#difine,宏定义 ,宏和函数的区别,#,##(实例分析)

开门见山的说:

目录

开门见山的说:

#difine定义标识符

宏的定义

宏和函数的区别 

我将从四个方面进行分析

 符号#

符号##


#difine定义标识符

#difine可以定义标识符

可以是整形

可以是字符串

可以是表达式

可以是代码语句

#include<stdio.h>

#define Int  100//整形
#define Char  "结果等于"//字符串
#define Expression(x,y) ((x)*(y))//表达式
#define Sentence printf//代码语句
int main()
{
	int c = Int;
	Sentence(Char "%d\n", Expression(c, c));
	//两段代码本质上是一样的
	printf("结果等于%d\n", 100 * 100);
	return 0;
}

宏的定义

 #define Expression(x,y) ((x)*(y))//表达式

 这个Expression(c, c);代码就是100*100,有点类似于函数传参,但和函数完全不一样

注意在 #define定义宏表达式时候,不要吝啬括号的使用,因为宏本质是上是补充了代码,需要明确

运算符之间的优先顺序

 

补充:
#undef
这条指令用于移除一个宏定义。
#undef NAME
// 如果需要重新定义,那么它的旧名字首先要被移除。


宏和函数的区别 

我将从四个方面进行分析

代码效率

操作方面

功能性

参数问题


代码效率

宏:宏本质是代码的替换,本身延长的代码的长度,但对比函数不需要额外开辟空间和栈空间,效率更快,空间利用率更高。

函数:需要额外开辟空间,会存在调用和返回的时间和空间上的损耗。

操作方面

宏:没有参数的限制,只要是符合宏定义的都可以使用。

需要用括号保证优先级,以防运算出错操作性不高,复杂代码难以实现

函数:虽然只能使用函数定义的参数,但代码灵活性高,可以实现复杂代码,求值更容易预测。
 

功能性

宏:不方便调试,不方便排查问题,不能实现递归和高阶函数功能,

函数:可以调试,方便排查错误,可以递归实现高阶函数功能,更利于解决复杂问题。
 

 参数问题

宏:宏的参数不会销毁,会存在多次调用重复参赛,导致代码出错

函数:函数的参数会销毁,不会多次调用重复参数导致出错


 符号#

在宏定义时,使用 # 把一个宏参数变成对应的字符串
下面把参数i变成字符串10.

#include<stdio.h>

#define P(i) printf(#i)
int main()
{
	P(10); printf("等于%d\n", 10);
	return 0;
}

结果图 


符号##

在宏定义时,##可以把位于它两边的符号合成一个符号。

下面把cl 和 ss合并为clss

#include<stdio.h>

#define C cl##ss
int main()
{
	int clss = 105;
	printf("班级是%d\n",C );
	return 0;
}

结果图


哈,谢谢各位同志的阅读,然后呢如果觉得本文对您有所帮助的话,还给个免费的赞吧

Thanks♪(・ω・)ノ

(期待一下,要是有分享和收藏更好啦)

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值