(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