【C言語】
デッドコード (冗長コード)
return x++;

warning: Value stored to ‘x’ is never read

警告:’x’に格納された値が読み出されない
[clang-analyzer-deadcode.DeadStores]


■1.return x++ の後置演算子がデッドコード

#include    <stdio.h>
int 前置演算子(int x){
    return  ++x;    //OK
}
int 後置演算子(int x){
    return  x++;    //NG:意味なし++
}
int main(void){
    printf("%d\n",前置演算子(1)) ;//2と表示される
    printf("%d\n",後置演算子(1)) ;//1と表示される
}

自動変数 x を return 時に後置演算で ++ しても、
もはや誰も参照できないので 後置演算++ に意味がありません。
++ した値を return したいのであれば
2行に分けるか、
前置演算子を使いましょう


■2.if((x == 0) || (x != 0 && y != 0))冗長条件

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

[(style)redundantCondition]

//  cppcheck  --enable=all
int f1(int x,int y) {
    if((x == 0) || (x != 0 && y != 0))//NG
        return  1;
    return  0;
}

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

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


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


●修正後:if((x == 0) || (y != 0))

int f2(int x,int y) {
    if((x == 0) || (y != 0))//OK
        return  1;
    return  0;
}

参考:

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

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