C语言带参数宏定义与函数传参的区别

C 语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。带参宏定义的一般形式为:#define 宏名(形参列表) 字符串在字符串中含有各个形参。带参宏调用的一般形式为:宏名(实参列表);例如:#define M(y) y* y+3* y //宏定义// Codek=M(5); //宏调...
摘要由CSDN通过智能技术生成

C 语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际
参数

对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。
带参宏定义的一般形式为:

#define 宏名(形参列表) 字符串

在字符串中含有各个形参。
带参宏调用的一般形式为:
宏名(实参列表);
例如:

#define M(y) y* y+3* y //宏定义
// Code
k=M(5); //宏调用

在宏调用时,用实参 5 去代替形参 y,经预处理宏展开后的语句为 k=5* 5+3* 5。
【示例】输出两个数中较大的数。

1. #include <stdio.h>
2. #define MAX(a,b) (a>b) ? a : b
3. int main(){
4. int x , y, max;
5. printf("input two numbers: ");
6. scanf("%d %d", &x, &y);
7. max = MAX(x, y);
8. printf("max=%d\n", max);
9. return 0;
10.}
运行结果:
input two numbers: 10 20
max=20

程序第 2 行进行了带参宏定义,用宏名 MAX 表示条件表达式(a>b) ? a : b,形参 a、
b 均出现在条件表达式中。程序第 7 行 max=MAX(x, y)为宏调用,实参 x、y,将代换形
参 a、b。宏展开后该语句

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中,内联函数宏定义都是用来提高程序的执行效率的方式,但它们之间有一些区别。 首先,内联函数是在函数调用时将函数体直接复制到调用处,而不是通过函数调用来执行代码。这样可以节省了函数调用的开销,提高了程序的运行速度。内联函数需要使用`inline`关键字来声明,并且适用于函数体较小的情况。内联函数有以下特点:只能在函数定义时使用`inline`关键字声明;内联函数的定义通常放在头文件中;对于大型的、递归的或包含循环的函数不宜使用内联函数。 其次,宏定义是一种文本替换的机制,通过在代码中定义,在程序编译前将名称替换为对应的内容。宏定义使用`#define`指令来定义,在替换时没有函数调用的开销,因此宏定义可以加速程序的执行。宏定义有以下特点:可以在任何地方进行定义和使用;使用宏定义时进行的是文本替换,不会创建函数的副本;替换时可能存在隐藏的错误。 总结起来,内联函数宏定义在提高程序执行效率方面有相似的作用,但内联函数通常比宏定义更安全可靠。由于内联函数是使用函数调用方式执行代码,因此可以进行类型检查和其他编译期间的优化,而宏定义只是进行文本替换,所以容易出现一些潜在的错误。根据具体的代码需求和效率要求,选择使用内联函数宏定义更加合适。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值