2012年4月7日土曜日

C言語のアンチパターン/可変定数テーブルの作り方

みなさん、こーゆうコーディングはマネしちゃだめですよ。




既存コードを改造しようと、コードの構造を調べていた。
あるコマンドの呼び出し方法を調べようと、"comAAA1" で grep したら、とんでもない大物に出会った。
※ 情報漏洩防止の観点から、変数名、ファイル名等は適当ですのであしからず。





[AAA.h]
{  "comAAA1", funcAAA1 },
{  "comAAA2", funcAAA2 },
{  "comAAA3", funcAAA3 },






上記は、ヘッダファイルの中身。これ以上でも、これ以下でもない。

最初見た時、

( ゚д゚) ・・・  (つд⊂)ゴシゴシ  (;゚д゚) ・・・

なんじゃこりゃーー!!
ってなった。

「このコードだけでコンパイルが通る訳が無い」
気を取り直して、[AAA.h] で検索して、何故コンパイルが通るか調べる事にした。





[XXX.h]
const struct  JUMP_TABLE  JumpTable[] =
{
#include "AAA.h"
#include "BBB.h"
#include "CCC.h"
#include "DDDh"
};



これは……
これはもう、怒りを通り越して笑いしかでてこない。

担当者に「なぜこんなコードなのか?」と尋ねると、
「(前任者が)メンテナンス性を考慮して、機能毎に好きなようにコマンドを追加可能にしたんです」

orz

もうね、可愛そうだった、本当に。
この程度のコーディングしかできないなんて。
1年目の僕だって、こんなコードを書かなかっただろう。

いかに「動的メモリの獲得がイヤ」だからって、この書き方は無いだろう、と思うのは、僕ぐらいだろうか……。


2 件のコメント:

  1. こんにちは。

    昔ならCプログラミング診断室に投稿したいネタです(^^)

    返信削除
  2. TO:fukanoさん

    ですね。
    最近C言語は減ってきている様ですし。
    しかし、いまだにこんなコーディングする人、居るのでしょうか。

    返信削除