C语言宏定义问题
#include<stdio.h>#define F(n) 2*n
int main()
{
printf("%d,%d",F(3+(2)),F(5));
return 0;
}
为啥会将宏里面的拆分开来计算?也就是变成F(3)+2呢?
宏定义只是单纯的实现替换,F(3+2)=2*3+2=7 宏定义只是简单的替代,不做运算。
#define F(n) 2*n
F(3+(2)) n=3+(2) 那么2*n=2*3+(2)
F(5) n=5 那么2*n=2*5
如果想先计算n的值,可以这么宏定义
#define F(n) 2*(n )
F(3+(2)) 2*(n)=2*(3+(2))
希望对你有所帮助 3+(2)是什么意思 小甲鱼水里游 发表于 2020-2-21 14:43
3+(2)是什么意思
我想算看会不会先计算3+2在计算宏
不会的
xiaosdm 发表于 2020-2-21 15:24
我想算看会不会先计算3+2在计算宏
并不会 小甲鱼水里游 发表于 2020-2-21 14:43
3+(2)是什么意思
宏只能简单替换,连括号都不会加,比如
#define F(n) n+5
F(5*F(5))=30
一样 小甲鱼水里游 发表于 2020-2-21 15:58
宏只能简单替换,连括号都不会加,比如
#define F(n) n+5
F(5*F(5))=30
不应该是:F(5*F(5))=>F(5*5+5)=>(5*5+5)+5=35? xiaosdm 发表于 2020-2-21 15:24
我想算看会不会先计算3+2在计算宏
宏就是完成一个替换的功能,仅单纯的替换,不计算优化的 4goodworld 发表于 2020-2-21 21:40
不应该是:F(5*F(5))=>F(5*5+5)=>(5*5+5)+5=35?
哦,忘了还有一个F{:5_108:} 本帖最后由 major_lyu 于 2020-2-21 22:34 编辑
宏展开就是单纯的字符替换。
你如果想要F(3+2)的值与F(5)的值相同,可以像下面这样定义宏
#define F(n) (n)*2
这样F(3+2)=(3+2)*2 =10
F(5) = (5)*2 = 10
宏定义的时候给参数加上括号,就是强制宏替换后的表达式中替换的字符优先运算。
但是如果定义:#define F(n) n*2
则:F(3+2) =3+2*2=7,
F((3+2)) =(3+2)*2=10)
F(((3+2))) =((3+2))*2
好好体会一下,字符替换。哈哈
宏定义只是单纯的实现替换,不会实现运算。{:5_103:}
页:
[1]