Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

やってはいけないC言語コーディング

10年以上前に書かれたC言語のソースを見ていたら、ダメなコーディングの展覧会のようになっていたので、こういう書き方はしてはいけないという例として書き残しておきます。

1) ファイルの最後に意味のないコメント

/*****************************************************************************/
/* End of File                                                               */
/*****************************************************************************/

これ何のために入っているのかさっぱりわかりませんでした。 削るだけで3行減らせます。

2) 無駄に冗長な関数コメント

/*****************************************************************************/
/*                                                                           */
/*      関数名       : do_something()                                            */
/*                                                                           */
/*      概要         : ほげ処理                                    */
/*                                                                           */
/*      引き数       : int foo    フー                */
/*                                                                           */
/*      戻り値       : 正常         OK                                 */
/*                   異常         NG                                 */
/*                                                                           */
/*      作成者       : XXXX                                                   */
/*                                                                           */
/*      作成日       : XXXX/XX/XX                                            */
/*                                                                           */
/*****************************************************************************/
int do_something(int foo)

これ、かなりイラつきます。
なぜ1行毎に/* */で区切っているのか意味が分からない。
そして意味のない空行にもムカつく。
そして大量の*、これ絶対にソースコピぺして作ってる。
こんなことしたら、メンテが大変になる。
こう書くのが良い。

/**
 * @brief ほげ処理
 * @param int foo フー
 * @retval OK : 正常
 * @retval NG : 異常
 */

3) returnの戻り値を意味もなく、()でくくる。

    return( OK );

意味不明なのでカッコは削除するべし。

4) デバッグ用ログ出力に#ifdef DEBUGを使っている。
5) 関数名を直打ちしている。

int do_something( void )
{
#ifdef DEBUG
    printf("do_something: foo[%d]\n", 34);
#endif
}

こういう感じのマクロを使おう。コーディング量かなり減らせる。

#if defined(DEBUG)
  #define DEBUG_LOG(fmt,...) printf( "%s [Line:%d] " fmt, __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
  #define DEBUG_LOG(fmt,...)
#endif

改良後

int do_something( void )
{
    DEBUG_LOG("foo[%d]\n", 34);
}