【C言語】
コーディング規約のデメリット
早期リターンをいつまで禁止するのか?

古い コーディング規約を ガチガチに 厳守する弊害

■見直したいコーディング規約

・char/short/int/long を直接記述する事禁止する
数値を直接記述すること禁止、必ずマクロにする事
変数の宣言は関数の先頭でまとめて行い別の行で全てゼロで一律もれなく初期化する事
実績があり安定しているC89仕様で記述する事C99仕様の利用禁止
誰にでも分る十分に長い名前を変数に付ける事
・誰にでも分るようにコメントは十分に付ける事
型が明確に分るようにキャストで型を明示する事
代入と比較を間違わないよう定数を左に書く事(ヨーダ記法を使う事)
・変数の型が分るように接頭語を付ける事(システムハンガリアン記法を使うこと)
関数の出口は必ず一つ。エラーが発生しても 早期リターン 禁止。


■簡単なプログラムの例

#include    <stdio.h>
static  char    *cat[] ={
    "にゃん",
    "meows",
    "喵喵",
    NULL
};
int main(void)
{
    for(int i = 0 ; cat[i] != NULL ; i++){
        printf("%s\n",cat[i]);
    }
}

職業プログラマなら1秒で理解できる
この簡単なプログラムが、
杓子定規のコーディングルールに従うと、、、


■規約を守って難解になった例

#include    <stdio.h>
typedef unsigned char   U1;
typedef signed   int    S4;
typedef void            VD;
#define ZERO        0U
#define ONE         1U
#define TWO         2U
#define THREE       3U
#define FOUR        4U
#define NOT_ERROR   0
static  U1    *cat[FOUR] ={
    (U1 *)"にゃん",
    (U1 *)"meows",
    (U1 *)"喵喵",
    NULL
};
S4 main(VD)
{
    /* 変数宣言         */
    U1 u1_t_loopcounter ;
    /* 変数の初期化     */
    u1_t_loopcounter = (U1)ZERO ;

    for(u1_t_loopcounter = (U1)ZERO ;
        (U1 *)NULL != cat[u1_t_loopcounter];
            ++u1_t_loopcounter){    //カウンターに1を加える
        printf("%s\n",(char *)cat[u1_t_loopcounter]);
    }

    return  (S4)NOT_ERROR ;
}

■アンケート

2
貴方の嫌いなコーディング規約は?