c语言 c136错误,C语言day10-06带参数的宏定义

本文讲解了C语言中宏定义的使用方式,包括注意事项及与函数的区别。通过具体实例展示了带参数宏定义的正确写法及其与运算优先级的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pragma mark 带参数的宏定义

pragma mark 概念

/**

宏定义并不会做任何运算, 无论是有参数 还是 没有参数都仅仅是在翻译成0和1之前做 一个简单的"替换"

带参数的宏定义注意点

1.一般情况下 建议写带参数的宏,给每个参数加上一个()

2.一般情况下建议写带参数的宏的时候, 结果也加上一个() // 请记住

*/

pragma mark 代码

#include

int sum (int v1, int v2)

{

return v1 + v2;

}

/*

define 代表要定义一个宏

SUM 宏的名称

(v1,v2) 参数, 注意点, 不需要写数据类型

v1 + v2 用于替换的内容

宏定义并不会做任何运算, 无论是有参数 还是 没有参数都仅仅是在翻译成0和1之前做 一个简单的"替换"

带参数的宏定义注意点

1.一般情况下 建议写带参数的宏,给每个参数加上一个()

2.一般情况下建议写带参数的宏的时候, 结果也加上一个()

*/

#define SUM(v1,v2) v1+v2

// 要求定义一个带参数的宏,用于计算两个变量的乘积

//#define CF(v1,v2) v1*v2

#define CF(v1,v2) (v1)*(v2)

// 要求定义一个带参数的宏,用于计算某个数的平方

//#define PF(v1) (v1)*(v1)

#define PF(v1) ((v1)*(v1))

int main()

{

/*

int a = 10;

int b = 15;

// int res = sum(a, b);

// SUM(a,b) v1 == a v2 == b

// a+b

// int res = a+b;

int res = SUM(a, b);

// printf("res = %i\n",res);

*/

#warning 什么时候使用宏定义 什么时候使用函数

/*

什么时候用带参数的宏定义 什么时候用函数

如果函数内部的功能比较简单,仅仅是做一些简单的运算 那么可以使用宏定义,使用宏定义效率更好,运算速度更块

如果函数内部的功能比较复杂, 不仅仅是一些简单的运算,那么建议使用函数

*/

#warning 定义一个带参数的宏,用于计算两个变量的乘积

#warning 1.带参数的宏 参数没有加上()

// CF(5 + 5,4+4)

// 5 + 5 * 4 + 4 // 5 + 20 + 4 = 29

#warning 1.带参数的宏 参数加上()

// CF(5 + 5, 4 + 4)

// (5 + 5) *(4 + 4) == (10)*(8)

// int res = CF(5 + 5, 4+4); // 10 * 8 = 80

#warning 2.带参数的宏 结果没有加上()

// int res = PF(4);

// PF(2 + 2)

// (2 + 2) * (2 + 2)

// 16 / 16 * 16 == 1 * 16 == 想要的结果为 16

// PF(v1) / PF(v1) * PF(v1)

// PF(2 + 2) / PF(2 + 2) * PF(2 + 2)

// (2 + 2) *(2 + 2) / (2 + 2) *(2 + 2) * (2 + 2) *(2 + 2)

// 4 * 4 / 4 * 4 * 4 * 4

// 16 / 4 * 4 * 4 * 4

// 16/4 == 4 * 4 == 16 * 4 = 64 * 4 = 256 结果却为256

// int res = PF(2 + 2) / PF(2 + 2) * PF(2 + 2);

// 4 / 4 * 4 == 想要的结果 为 4

// PF(2) / PF(2) * PF(2)

// (2 *2) / (2) * (2) * (2)*(2)

#warning 2.带参数的宏 结果加上()

// PF(2) / PF(2) * PF(2)

// ((v1)*(v1)) / ((v1)*(v1)) * ((v1)*(v1))

// ((2)*(2)) / ((2)*(2)) * ((2)*(2))

// 4 / 4 * 4 == 4 结果=4 是想要的

int res = PF(2) / PF(2 ) * PF(2 );

printf("res = %i\n",res);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值