tacsheaven 2012-08-14 15:46:37

[C] IFが272個… このエントリーをはてなブックマークに追加

投稿者からのアピールポイント

おそらくCOBOLerの人が書いたのであろうコード。 16進2桁を数値化するのにIFが272個、って、まあ書く方も書く方だけど通す方も通す方だ。

むろん、単体テスト結果なんてあるはずもなく…… ええ、全面改修の案件だったので、このコードは闇に葬りましたとも。

int hex2int(char[2] hex) {
  if (hex[0] == '0') {
    if (hex[1] == '0') return 0;
    if (hex[1] == '1') return 1;
//...
    if (hex[1] == 'F') return 15;
  } else if (hex[0] == '1') {
    if (hex[1] == '0') return 16;
//... これが延々と続くのです…
// 上位ニブル分が16個、下位ニブル分が各16個あるので、計 16+16*16 = 272個のIFが並んでるの…

使い方ヒント: 「これは臭う」という行を見付けたら、各行のsmellをクリックしてマーキングしておきましょう(要Twitter OAuth認証)

コメント(4)

#1 juangotoh 2012-08-14 16:50:44  

「特定の文字コードに依存しないように書いてるんです。EBCDICだったら数字は…」とか言われそうだけど、そこまで考えていないかもしれない…

#2 _vapor_ 2012-08-15 00:01:24  

桁増えたらどうする気だろう

#3 BeldenDrive 2012-08-18 13:29:18  

関数の一番最後がどうなっているんでしょうね。 入力が "0T" とかだったりした場合は考えなくていい? まあ、それ以前の問題か

#4 jkr_2255 2013-03-01 12:22:48  

ASCIIやUnicode前提のプログラミング言語も多いけど、C言語は0~9が連続していることくらいしか文字コードへの前提がなかったような。

コメント投稿には、twitter認証が必要です。

Twitter認証

このウンコードに臭った人は、こちらのウンコードにも臭ってます

[C] NULL と 8 の何故

このエントリーをはてなブックマークに追加

テストは通ってるけど、教科書からやり直し...

#define TO_STRING(n, str) \
  if(n != N...

鑑賞する »

[C] 殺意を覚えたコメント

このエントリーをはてなブックマークに追加

このコメントを書いた人はこの職業に向いて...

/*  よくわからないからNULL  */
foo( NULL );

鑑賞する »

[C] 油断大敵

このエントリーをはてなブックマークに追加

[入力文字列がパスワードとして適切か判定...

#include <stdio.h>
#include <ctype.h>
...

鑑賞する »