gpt4 book ai didi

c - printf() 的实际表现如何?

转载 作者:太空宇宙 更新时间:2023-11-04 02:06:03 27 4
gpt4 key购买 nike

This documentation给出了如何编写可变参数函数的示例,printf()

作为文档,printf() 将找到字符串中的第一个 % 并使用 va_arg(argp, int) 获取第一个参数指针;找到字符串中的第二个 % 并再次使用 va_arg(argp, int) 得到第二个参数指针……

所以,我写了一段代码:

int Var = 0;

int Func (int X)
{
Var = Var + X;
return Var;
}

int main (void)
{
printf ("%d\n%d", Func (3), Func (5));
}

它将打印:

8    <-- 5+3
5 <-- 5

我知道在 printf() 中调用多个函数是未定义的行为,但为什么不打印:

3    <-- 3
8 <-- 3+5

就像那个documentation中的示例代码

ps:如果我的问题不清楚,请帮我编辑一下。谢谢

最佳答案

在 C 中计算函数参数的顺序平台相关(不是未定义,只是未指定)。

请参阅讨论它的博客:Funny thing about C parameter evaluation order…

如果你想强制顺序,你可以在 printf() 之前调用 Func():

int a = Func(3);
int b = Func(5);
printf("%d\n%d", a, b);

关于c - printf() 的实际表现如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20449380/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com