C语言中的宏与函数

我经常看到使用宏胜于使用函数的示例和案例。

有人可以举例说明宏与函数相比的缺点吗?


慕侠2389804
浏览 492回答 3
3回答

holdtom

宏功能:宏已预处理无类型检查代码长度增加使用宏可能会导致副作用执行速度更快在将编译宏名称替换为宏值之前在小代码多次出现的地方很有用宏也没有检查编译错误功能特点:功能已编译类型检查已完成代码长度保持不变无副作用执行速度较慢在函数调用期间,发生控制转移在大型代码多次出现的地方很有用功能检查编译错误

海绵宝宝撒

副作用很大。这是一个典型的情况:#define min(a, b) (a < b ? a : b)min(x++, y)扩展到:(x++ < y ? x++ : y)x在同一条语句中增加两次。(以及未定义的行为)编写多行宏也很麻烦:#define foo(a,b,c)&nbsp; \&nbsp; &nbsp; a += 10;&nbsp; &nbsp; &nbsp; &nbsp; \&nbsp; &nbsp; b += 10;&nbsp; &nbsp; &nbsp; &nbsp; \&nbsp; &nbsp; c += 10;他们要求\在每行的末尾。宏不能“返回”任何东西,除非您将其设为单个表达式:int foo(int *a, int *b){&nbsp; &nbsp; side_effect0();&nbsp; &nbsp; side_effect1();&nbsp; &nbsp; return a[0] + b[0];}除非您使用GCC的expression语句,否则无法在宏中执行此操作。(编辑:虽然您可以使用逗号运算符...但是忽略了它...但是它可能仍然不太可读。)操作顺序:(由@ouah提供)#define min(a,b) (a < b ? a : b)min(x & 0xFF, 42)扩展到:(x & 0xFF < 42 ? x & 0xFF : 42)但&优先级低于<。因此0xFF < 42首先被评估。
打开App,查看更多内容
随时随地看视频慕课网APP