栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

开门见山的说:

目录

开门见山的说:

#difine定义标识符

宏的定义

宏和函数的区别 

我将从四个方面进行分析

 符号#

符号##


#difine定义标识符

#difine可以定义标识符

可以是整形

可以是字符串

可以是表达式

可以是代码语句

#include

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

宏的定义

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

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

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

运算符之间的优先顺序

 

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


宏和函数的区别 

我将从四个方面进行分析

代码效率

操作方面

功能性

参数问题


代码效率

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

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

操作方面

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

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

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

功能性

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

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

 参数问题

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

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


 符号#

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

#include

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

结果图 


符号##

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

下面把cl 和 ss合并为clss

#include

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

结果图


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

Thanks♪(・ω・)ノ

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/879737.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号