The beast of halfpace

日々のメモ

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  107  : 記事  0  : コメント  396  : トラックバック  31

ニュース

Mozilla Firefox ブラウザ無料ダウンロード

記事カテゴリ

書庫

日記カテゴリ

先日職場で、とある人の書いたプログラムを見ていたら、「マジックナンバーは悪だ!」と言わんがばかりのコードと遭遇。

普通に0と書いてあればわかる部分にもxxx_ZERO(xxxはモジュール名のプレフィックス)みたいなマクロを使っていた。

gotoでもそうだけど、闇雲に「こうしてはいけない」という縛りにとらわれすぎるのもどうかと思うんですけどね。

 

投稿日時 : 2007年3月9日 0:54

コメント

# re: マジックナンバー=悪? 2007/03/09 2:45 ひろえむ
というか、それもある意味、マジックナンバーの一種ですよね(^^;

# re: マジックナンバー=悪? 2007/03/09 3:18 なちゃ
ZEROってマジックナンバーでしょ??


# re: マジックナンバー=悪? 2007/03/09 7:14 じゃんぬねっと
#define ZERO 0
#define ONE 1
#define TWO 2

というジョークと何ら変わらないですね。
それを本気でやっているとしたら、その '真剣さが' 怖すぎます。

# re: マジックナンバー=悪? 2007/03/09 8:02 επιστημη
あるねー。
サイアクだったのが、グループごとに異なる xxx_TRUE/xxx_FALSE が定義されてて、
それぞれに意味が異なるっちゅー。

あるとこでは
#define HOGE_FALSE 0
またあるとこでは
#define PAYO_FALSE ((void*)0)

さらにまた xxx_TRUE が 1 だったり !0 だったり ~0 だったり。


# re: マジックナンバー=悪? 2007/03/09 10:48 2リットル
仕様変更で値が変わっちゃったら

#define ZERO 3
#define ONE 1
#define TWO 8

あ…ありのまま 今 起こった事を話すぜ!・・・


# re: マジックナンバー=悪? 2007/03/09 10:55 渋木宏明(ひどり)
基本的にマジックナンバーはキライだけど、場面によって 0, 1, 2 辺りはハードコードしますね。
桁合わせとかで 10 や 100 なんかもそのまま書いちゃうな。
コレクションを多用するようになってから、「最大値」みたいのを const で持つケースはかなり減ったなぁ。
#define はデバッガで値が見られないからキライ。


# re: マジックナンバー=悪? 2007/03/09 10:57 渋木宏明(ひどり)
真理値の定義はそれぞれの言語での定義に従わなくちゃ駄目だと思うなー
C では
#define FALSE 0
#define TRUE (!FALSE)
以外の定義は間違いだと思う。
C++/C# なら当然、組み込みの true/false を使うべき。


# re: マジックナンバー=悪? 2007/03/09 12:31 かずくん
数量としてのマジックナンバーならそのまま扱うけど、
コードとしてのマジックナンバー(ex:エラーコード等)なら別名を定義します。

# re: マジックナンバー=悪? 2007/03/09 19:24 ぽぴ王子
そこで伝家の宝刀ですよ(違
for PASCAL信者

#define begin {
#define end }

# re: マジックナンバー=悪? 2007/03/09 21:10 Jitta
> gotoでもそうだけど、闇雲に「こうしてはいけない」という縛りにとらわれすぎるのもどうかと思うんですけどね。
 賛成の反対。。。

 普通に goto 使わず、ブロック化すればいいところで、何で goto 使うよorz ってコードを保守しています。


# re: マジックナンバー=悪? 2007/03/10 3:51 επιστημη
> #define begin {
> #define end }

うえーい。

#define ever (;;)

for ever {
 ...
}


# re: マジックナンバー=悪? 2007/03/10 5:10 スーパーあんどちん
なんか本人も気づかないうちに盛り上がってしまいましたが…(レスがこれだけあったのは結構嬉しかったりする)
ちなみにじゃんぬねっとさんが「ジョーク」と書いていることが現実に行われていました。
ヘッダファイルを見たところ
...
#define xxx_TWELVE 12
#define xxx_CD_SECTOR_SIZE 2352
#define xxx_THOUSAND 1000
みたいになっていました。
使っている数値はすべてマクロ化。しかも12と1000の間にオーディオCDのセクタサイズのマクロが割り込んでいるところにそこはかとなくセンスを感じました。
カレーの国の人が書いたソースですが、国が変わると感覚も変わるんでしょうかねぇ。


Post Feedback

タイトル
名前
Url:
コメント: