[英]Passing parameters evaluation direction in macro
正如我在C语言中所知道的那样,函数求值的实际参数的传递从最右边开始,并指向左边。 带参数的宏定义是什么情况? 我编写了一个代码以使含义更清楚,但是输出使我感到困惑……这是代码。
#define parsing(a,b) a*b
int parsefun(int a, int b)
{
return a*b;
}
int main()
{
int i=10;
printf("%d\n",parsing((i++),i));
i=10;
printf("%d\n",parsing(i,(i++)));
i=10;
printf("%d\n",parsefun((i++),i));
i=10;
printf("%d\n",parsefun(i,(i++)));
system("PAUSE");
return 0;
}
此代码输出100100100110
我希望宏的输出与功能相同。 但是关键点在哪里?
函数实际参数的解析从最右边开始,并指向左边
我认为您的意思是“评估”而不是“分析”。 但这不是事实,C标准没有指定顺序。
因此,您所获得的功能行为未由C标准指定 。
我希望宏的输出与功能相同
不评估宏参数,它们只是被替换。 因此,您最终得到以下结果:
int i=10;
printf("%d\n", (i++) * i);
i=10;
printf("%d\n", i * (i++));
之后,您只是看到未定义的行为 ,如以下问题所述: 为什么这些构造(使用++)未定义的行为? 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.