■1.何をしてるか1秒でわかるコードに
typedef enum { R, G, B } Color;
char *f1(Color c) {
switch (c) {
case R: return "赤";
case G: return "緑";
case B: return "青";
default: return "未知の色";
}
}
■2.ルールを守ってbreakを追加してみる
warning: ‘break’ will never be executed
警告:breakに制御は来ません
[-Wunreachable-code-break]
char *f2(Color c) {
switch (c) {
case R: return "赤"; break;
case G: return "緑"; break;
case B: return "青"; break;
default:
return "未知の色"; break;
}
}
⇒break が五月蠅くなった。
■3.さらに関数出口一つルールに従うと
char *f3(Color c) {
char *ret ;
switch (c) {
case R:
ret = "赤";
break;
case G:
ret = "緑";
break;
case B:
ret = "青";
break;
default:
ret = "未知の色";
break;
}
return ret ;
}
ついでに社内ルールでよくあるマルチステートメント禁止で書くと
⇒何をしてるのか、ぱっと見わからなくなった。
■4.まとめ(杓子定規はいけない)
以上がコーディングルールを杓子定規に守って
コードを難解にした例です。
MISRA-CもCERT-Cも必須ルールではなくて、
推奨ルールなのでガチガチに遵守するのではなく
柔軟に対応するのが良いでしょう。