正常的,当我们第一次接触 if 语句时,都默认它会判断 () 内的条件正确与否,并自动执行对应的分支。

但是,if 语句并非能自己判断条件,它只是判断 () 内的值是 0 还是非 0:

  • 读到 非 0(比如 1)→ 执行 if 下的语句
  • 读到 0 → 执行 else 下的语句

这听起来很奇怪,但确实如此。

举个例子

你可以自己试一试:if(1) 会执行哪一条?if(0) 又是哪一条?

#include <stdio.h>

int main() {
    if (1) {
        printf("if(1) 会执行这里\n");
    } else {
        printf("if(1) 不会执行这里\n");
    }

    if (0) {
        printf("if(0) 不会执行这里\n");
    } else {
        printf("if(0) 会执行这里\n");
    }

    return 0;
}

运行结果:

if(1) 会执行这里
if(0) 会执行这里

更进一步

既然 if 只看 0 / 非 0,那么函数的返回值也可以放进 if() 里——就像主函数的 return 0; 一样:

int is_ok() {
    return 1;   // 返回 1,表示“真”
}

if (is_ok()) {
    // 函数返回非 0,继续执行
} else {
    // 函数返回 0 时,才会执行这里
}

那么,是谁来判断 1/0 呢?

这跟 CPU 有关。提前透露一点:CPU 内部有一个状态寄存器,里面的标志位(比如 ZF 零标志)会记录运算结果是否为 0;if 最终会被编译成「条件跳转」指令,CPU 就是根据这些标志位来决定跳不跳转的。

等我们学到计算机组成原理之后,就能彻底明白了。

记住这个结论:C 语言里,0 为假,非 0 为真,if 只是检查这个结果。