Namaran

Code daily. Without assist.

2026-08-24

shortcircuit.c

#include <stdio.h>

int say(int n) {
    printf("%d ", n);
    return n;
}

int main(void) {
    if (say(0) && say(1)) {
        say(2);
    }
    printf("\n");
}

これは何を出力するでしょうか?

Answer

0(その後に改行)。&&は左のオペランドを先に評価し、短絡評価を行います — say(0)0(偽)を返すため、say(1)は実行されず、say(2)も実行されません。実際に出力されるのは最初の呼び出しの0だけです。