C/C++の関数は成功で1を返すのが多いと思う
strcmpみたいなのは例外

WindowsのAPIとかunixのシステムコールも基本的には同上だと思う

ところがシェルのコマンドとして観た場合 !0 は失敗で成功が 0
初心者はここで混乱する