对于以printf作为参数的循环

Deb*_*day 1 c for-loop printf-debugging

我无法理解为什么以下代码输出10.我的理解是,!printf("0")手段!0,这是TRUE.那么为什么不打印代码呢?"Sachin"

#include <stdio.h>

int main() {
    for (printf("1"); !printf("0"); printf("2"))
        printf("Sachin");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

产量

10
Run Code Online (Sandbox Code Playgroud)

Jea*_*bre 9

让我们分析一下这个副作用循环语句:

for(printf("1"); !printf("0"); printf("2"))
Run Code Online (Sandbox Code Playgroud)
  • 执行第一个语句,始终(init条件),yieiding 1
  • 然后测试条件:!printf("0")打印0,然后printf返回1,因为它只打印1个字符,否定返回0并且从不输入循环,因为条件从开始就是假的.所以既不2Sachin打印.

当然,这段代码不实用,几乎不可读.所以不要做这样的事情(例如,这puts("10");是一个很好的选择).

更多关于返回值printf(通常被忽略):

成功返回后,这些函数返回打印的字符数(不包括用于结束输出到字符串的空字节).

(来自https://linux.die.net/man/3/printf)