繁体   English   中英

为什么 printf 在 c 中有效?

[英]Why printf inside if condition works in c?

if(printf("Hello world")){}

上面代码的 output 是

Hello world

我的朋友告诉我 function printf 返回的字符长度在这里非零,所以条件为真。

但我不明白为什么它会执行那条 printf 语句。 printf 不应该只在{ }内执行吗?

if( expression )中的表达式始终被评估,在您的情况下,这是对printf的调用。

此表达式的值用于确定 if 的主体(在您的情况下为空白) if运行。

printf() function 返回打印的字符数。 如果打印时出现错误,它将返回一个负值。 查看 GNU C 库中的这个片段。

    int
__printf (const char *format, ...)
{
  va_list arg;
  int done;
  va_start (arg, format);
  done = __vfprintf_internal (stdout, format, arg, 0);
  va_end (arg);
  return done;
}

这里printf 返回 11 ,因为它打印的字符数是 11。

if(11) 为真 => 11 为正 integer 时为真,因此 if() 的主体将被执行。

要评估printf() function 的返回值,程序必须执行它。 这就是打印发生的原因。 执行它只是为了评估返回值。 这通常被称为副作用附带效应。 C 允许在if语句的测试部分中使用任何表达式,但返回void的表达式除外(另一种说法是不返回 function或过程)

printf 返回 11,因为计数是 11。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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