gpt4 book ai didi

c - printf() 'mysteriously' 如何知道我打算打印什么?

转载 作者:太空狗 更新时间:2023-10-29 16:37:17 28 4
gpt4 key购买 nike

我忘记将附带的变量添加到 printf() 调用中。 printf() 如何知道我要打印什么?

int successful = 0;//Flag
printf("\nEnter a number to search for: ");
scanf("%d", &data);
successful = search(list, data);
successful? printf("\n'%d' was found\n\n", data) : printf("\n'%d' was NOT found\n\n");

违规代码是最后一行三元表达式的最后一个“else”。我已经运行了几十次,它似乎总是在输出中打印出正确的参数。

: printf("\n'%d' was NOT found\n\n");

这怎么每次都有效?

最佳答案

它可能看起来有效,但不要依赖于此。

它可能有效,因为你最近的函数调用,

successful = search(list, data);

data 值留在堆栈的适当位置。


如果您忽略在声明单个局部变量的函数中包含 return 语句,有时会发生类似的意外发现,这可能会很有用。

int wowee () {
int val;
val = 12;

// <-- no return statement!
}

有时,局部变量val会被返回,可能是由于同一种堆栈重用。但这也是未定义的行为,即使它碰巧起作用。


这两种情况的寓意是启用更多编译器警告。编译器可以诊断此类问题,甚至可以检查格式字符串是否与传递给 prinf 系列函数的变量类型匹配。

关于c - printf() 'mysteriously' 如何知道我打算打印什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18841282/

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