おそらく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が並んでるの…
使い方ヒント: 「これは臭う」という行を見付けたら、各行のをクリックしてマーキングしておきましょう(要Twitter OAuth認証)
関数の一番最後がどうなっているんでしょうね。 入力が "0T" とかだったりした場合は考えなくていい? まあ、それ以前の問題か
ASCIIやUnicode前提のプログラミング言語も多いけど、C言語は0~9が連続していることくらいしか文字コードへの前提がなかったような。
コメント投稿には、twitter認証が必要です。
Twitter認証
「特定の文字コードに依存しないように書いてるんです。EBCDICだったら数字は…」とか言われそうだけど、そこまで考えていないかもしれない…