解释为什么输出 10 会来?
main()
{
for(printf("1");!printf("0");printf("2"))
{
printf("hello");
}
}
输出:
10
解释为什么输出 10 会来?
main()
{
for(printf("1");!printf("0");printf("2"))
{
printf("hello");
}
}
输出:
10
根据其printf(3)手册页,该printf
函数返回
打印的字符数(不包括用于结束输出到字符串的空字节)
所以,初始化部分for
运行一次printf("1")
:它将1
字符放入stdout
. 然后评估条件,!printf("0");
因为printf("0")
评估后,它将0
字符放入缓冲区stdout
并返回输出字符的数量,即1
条件为假,for
循环存在。
最后,main
正在退出程序,当时只有stdout
缓冲区被刷新。
stdout
为了迂腐,当由于不太可能的原因无法成功编写时,您的程序将具有不同的行为。
因为在 printf("1") 它按原样执行语句。然后 printf("0") 在屏幕上打印 0 并返回一个值 1。当你否定它时,它在 C 中给出一个等于 false 的值。所以 for 循环满足其结束条件并退出。