[英]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.