繁体   English   中英

在宏中传递参数评估方向

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM