>仕様書よめ。
>式を取って、その式の値が0かどうかで分岐すると書いてある。
>真偽は関係ない。

ここまで同意.


整数値と真偽値を文脈に応じて読み替えるのはプログラマの仕事。
Cは高級アセンブラだから、読む側が経験を積まないと、書き手の意図は読み取れない。
「if だから、条件式は真偽値だよね」は通用しない。
if (!strcmp(s1, s2)) {}
と書いて構わない仕様だといういうことをお忘れなく。


とも言えるわけで。
平行線だと思います。