【C言語】
冗長なif文は
括弧を沢山付けても読みにくい

(style): Redundant condition: Money!=0. ‘Money==0 || (Money!=0 && freetime==0)’ is equivalent to ‘Money==0 || freetime==0’ :

[(style)redundantCondition]


■冗長コードの括弧がうるさい

//  cppcheck  --enable=all
#include    <stdio.h>

//お金と暇
char *GOTOtravel(int Money,int freetime) {
    if((Money == 0) || ((Money != 0) && (freetime == 0)))//冗長コード
        return  "止めた";
    return  "行こう";
}
int main(void){
    printf("%s\n",GOTOtravel(0,0));
    printf("%s\n",GOTOtravel(0,1));
    printf("%s\n",GOTOtravel(1,0));
    printf("%s\n",GOTOtravel(1,1));
}

‘x==0 || (x!=0 && y==0)’ は
‘x==0 || y==0’と同じです。

第1条件が成立した時は
第2条件はもう判定する必要がありません。
これを論理演算子の「ショートサーキット」動作と言います。


第1条件が成立しなかった時、
x!=0が確定しているので
第2条件で
x!=0を判定する必要がありません。


➡冗長コードを削除した修正例

//  cppcheck  --enable=all
#include    <stdio.h>

//お金と暇
char *GOTOtravel(int Money,int freetime) {
    if(Money == 0 || freetime == 0)
        return  "止めた";
    return  "行こう";
}
int main(void){
    printf("%s\n",GOTOtravel(0,0));
    printf("%s\n",GOTOtravel(0,1));
    printf("%s\n",GOTOtravel(1,0));
    printf("%s\n",GOTOtravel(1,1));
}

参考:

EXP02-C. 論理 AND 演算子および論理 OR 演算子のショートサーキット動作について注意する

https://www.jpcert.or.jp/sc-rules/c-exp02-c.html