据我所知,在 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;
}
这段代码输出, 100 100 100 110
我希望宏的输出与函数相同。但是这里的关键点在哪里呢?
最佳答案
parsing of actual parameters of a function starts from rightmost and directed to left
我认为你的意思是“评估”而不是“解析”。但事实并非如此,C 标准没有指定顺序。
因此,您为函数获得的行为是 C 标准未指定的。
I hoped same output for macros as function
不计算宏参数,它们只是被替换。所以你最终得到这个:
int i=10;
printf("%d\n", (i++) * i);
i=10;
printf("%d\n", i * (i++));
之后,您只会看到未定义的行为,如以下问题所述:Why are these constructs (using ++) undefined behavior? .
关于c - 在宏中传递参数评估方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11176778/