アカウント名:
パスワード:
#define ZERO 1
一発の破壊力でこれに勝るコードを見たことが無い。
昔、マジックナンバー埋め込むなって言ったら
#define ICHI 1#define NI 2#define SAN 3::for (i = 0; i SAN; i++) {}
って書いた奴が居た。その後、変更入って//#define SAN 3#define SAN 4
になったんだが同じ人?
いえ、次の人です。前任者はSAN 0 となり発狂しました。
うちでも似たようなコード有りました。おそらくはコードチェッカー対策なんだろうけど、作った本人がもういないので問いつめられず。その数値にどういう意味が有るかをマクロ名として書いてほしいな・・・
意味がわかってないからそうなるんでしょ。こういうのもある。
omajinai()
hoge()
fuga()
GNU libintlライブラリのgettextP.h [google.co.jp]にあるね、"#define ZERO 1"。
JustSystemの悪口は、そこまでだ!
# AAA [justmyshop.com]ってなんだよ
これはかなりレベル高いな
もはやレベルが高いとか低いとか超越しているレベル。
長いほうは最長不倒関数 Never Ending Functionhttp://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.10.3.html [pro.or.jp]を紹介しておく
> #define ZERO 1すごいな…どうしてそうなったのか、それとも罠なのか。
月並みだけど・大文字英数のシンボルが変数。だったり定数だったり。・コードの3割がデッドコード・Perlコードにmyが1つも無い
>> #define ZERO 1>すごいな…どうしてそうなったのか、それとも罠なのか。
構造体のことをわかっていない奴が
struct hoge { int n_valid_size; int data[10];}
みたいなことをしたいのに
int data[11]
という風に書いて、data の実体を参照するのに
data[ZERO + int_valiable]
なぞとしたんではないかと思われ
>> #define ZERO 1> すごいな…どうしてそうなったのか、それとも罠なのか。
ZERO-ONEファンの仕業だと推測。
Perlコードにmyが1つも無い
それどころか、今メンテしているコードの特徴:
メンテの前にロジック追って書き直しましたよ。
Perlで大規模でキレイなコードを書くのが間違ってると思う。そういう言語として設計されていないから。つまり、Perlは4.*までは短く仕事を終わらす目的だったけど、5.*以降の拡張は設計思想が変わってしまって、矛盾をはらんでいる。
myは5.*からでしょ。4.*にはなかったと思う。localはあったけど。
>・Perlコードにmyが1つも無い
会社に「use strictって書くなよ!いちいち my って書かないといけないだろ!」って怒る人が居ますマジで
「じゃあ local って書けよ」って返してあげればいいかと。
# my 付けなくても問題ないコードなら local でも大丈夫じゃないの? :)
同様に"CONTINUE"を定義しているんだが、Cの擬似コードでいうなら
while( foo ){ swich( bar ){ case 1: if( CONTINUE != func1() ){ break; } case 2: if( CONTINUE != func2() ){ break; } .... }}みたいなのがあった。#こういう書き方できたっけ??? breakの所はreturnでもいいかも。
てっきりcontinue文と同じ処理だと思って読んでいたので当初は完全に理解不能になったよ。Cプログラマーばかりの環境で、誰もこの名前に疑問を差し挟まなかったのかね.
> #こういう書き方できたっけ??? breakの所はreturnでもいいかも。
break のとこ return にしたら動作がまったく変わっちゃわない?continue にするなら大丈夫そうだけど。
gettextのコードが常識かどうかは知らないが、それは最低限コメントに書かないといけないものだと思うよ。
/* iが0から10の間繰り返す。 */for (int i = 0; i 10; i++) {
}
コメントでは10はinclusiveに見えるのにコードの方では(<が消えたと仮定して)10がexclusiveな件。かえって混乱のズンドコに突き落とされるようなコメントなんかない方がマシです。ていうかコードの内容を繰り返しているだけのコメントなんかいらないので0と10という数字にどういう意味があるのかをちゃんと書いてください。件の「#define ZERO 1」も可変長配列のためだというコメントはちゃんと書かれてるよ
それなら、今のgcc独自拡張やC99では、そのような目的のために構造体の最後のメンバにchar array[];のような要素数指定のない配列を置くことが認められているので、ゆくゆくは消えることが期待できますね。
#まだ使われているところを全然見たことがないけどorz 普及するんだろうかC99
バイナリのプロトコルスタック実装すると構造体中のarray[1]は便利な気がするよ。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie
行数とか見た目の問題ならまだマシ (スコア:5, おもしろおかしい)
#define ZERO 1
一発の破壊力でこれに勝るコードを見たことが無い。
Re:行数とか見た目の問題ならまだマシ (スコア:4, おもしろおかしい)
昔、マジックナンバー埋め込むなって言ったら
#define ICHI 1
#define NI 2
#define SAN 3
:
:
for (i = 0; i SAN; i++) {
}
って書いた奴が居た。
その後、変更入って
//#define SAN 3
#define SAN 4
になったんだが同じ人?
Re:行数とか見た目の問題ならまだマシ (スコア:2, おもしろおかしい)
いえ、次の人です。前任者はSAN 0 となり発狂しました。
Re: (スコア:0)
うちでも似たようなコード有りました。
おそらくはコードチェッカー対策なんだろうけど、作った本人がもういないので問いつめられず。
その数値にどういう意味が有るかをマクロ名として書いてほしいな・・・
Re: (スコア:0)
意味がわかってないからそうなるんでしょ。
こういうのもある。
omajinai()
hoge()
fuga()
Re:行数とか見た目の問題ならまだマシ (スコア:2, 参考になる)
GNU libintlライブラリのgettextP.h [google.co.jp]にあるね、"#define ZERO 1"。
Re: (スコア:0)
そこでZEROを0でないとする用途は、以下のタイプが既存コードに存在した。
・スレッシュホールド
・0はUnknown/Blankとして扱う為、1をゼロにする(配列?)
・0-255にマイナス、ゼロ、プラスを配置する為
・単なるエラー種別
・数学的な用途ではない単なる単語のZERO(他はEVEN, ODDなど各種)
・ifdefで、条件に応じて底を変更する為、ZEROが可変
・ZERO~という頭文字もしくは句。なのでZEROという単語ではなく、略称もしくは設定値の一つ
・数字のゼロとリターンコードのゼロを明確に分ける為
・その他
大雑把に言えば
・コードテクニック的なもの/簡便性を上げるもの
・数学的なもの
・デバッグ的なもの
・ただの文字
・その他
に分けられるかと。まあ、大雑把に見た限りですが。
Re:行数とか見た目の問題ならまだマシ (スコア:1, おもしろおかしい)
を見た事がある。(きちんと意味のある数値に使っていた。)
サルが書いたコードと報告したら、
先輩に "サルが聞いたら気を悪くするな。" と言われ、納得した。
Re: (スコア:0)
JustSystemの悪口は、そこまでだ!
# AAA [justmyshop.com]ってなんだよ
Re: (スコア:0)
ほめてもいいくらい。
Re: (スコア:0)
これはかなりレベル高いな
Re: (スコア:0)
もはやレベルが高いとか低いとか超越しているレベル。
長いほうは
最長不倒関数 Never Ending Function
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.10.3.html [pro.or.jp]
を紹介しておく
Re: (スコア:0)
Re: (スコア:0)
> #define ZERO 1
すごいな…どうしてそうなったのか、それとも罠なのか。
月並みだけど
・大文字英数のシンボルが変数。だったり定数だったり。
・コードの3割がデッドコード
・Perlコードにmyが1つも無い
Re:行数とか見た目の問題ならまだマシ (スコア:2)
>> #define ZERO 1
>すごいな…どうしてそうなったのか、それとも罠なのか。
構造体のことをわかっていない奴が
struct hoge { int n_valid_size; int data[10];}
みたいなことをしたいのに
int data[11]
という風に書いて、data の実体を参照するのに
data[ZERO + int_valiable]
なぞとしたんではないかと思われ
Re:行数とか見た目の問題ならまだマシ (スコア:1)
>> #define ZERO 1
> すごいな…どうしてそうなったのか、それとも罠なのか。
ZERO-ONEファンの仕業だと推測。
Re:行数とか見た目の問題ならまだマシ (スコア:1)
それどころか、今メンテしているコードの特徴:
メンテの前にロジック追って書き直しましたよ。
Re:行数とか見た目の問題ならまだマシ (スコア:2)
Perlで大規模でキレイなコードを書くのが間違ってると思う。そういう言語として設計されていないから。
つまり、Perlは4.*までは短く仕事を終わらす目的だったけど、5.*以降の拡張は設計思想が変わってしまって、矛盾をはらんでいる。
myは5.*からでしょ。4.*にはなかったと思う。localはあったけど。
Re: (スコア:0)
>・Perlコードにmyが1つも無い
会社に
「use strictって書くなよ!いちいち my って書かないといけないだろ!」
って怒る人が居ます
マジで
Re:行数とか見た目の問題ならまだマシ (スコア:1)
「じゃあ local って書けよ」って返してあげればいいかと。
# my 付けなくても問題ないコードなら local でも大丈夫じゃないの? :)
Re: (スコア:0)
同様に"CONTINUE"を定義しているんだが、Cの擬似コードでいうなら
while( foo ){
swich( bar ){
case 1:
if( CONTINUE != func1() ){ break; }
case 2:
if( CONTINUE != func2() ){ break; }
....
}
}
みたいなのがあった。
#こういう書き方できたっけ??? breakの所はreturnでもいいかも。
てっきりcontinue文と同じ処理だと思って読んでいたので当初は完全に理解不能になったよ。
Cプログラマーばかりの環境で、誰もこの名前に疑問を差し挟まなかったのかね.
Re:行数とか見た目の問題ならまだマシ (スコア:1)
> #こういう書き方できたっけ??? breakの所はreturnでもいいかも。
break のとこ return にしたら動作がまったく変わっちゃわない?
continue にするなら大丈夫そうだけど。
Re: (スコア:0)
Re: (スコア:0)
単純に見えるものほど、実は闇が深いということが往々にしてあるのだし。
Re:行数とか見た目の問題ならまだマシ (スコア:1)
For i = 1 to 10 do
としたい気分で
for(i = 0; i <= 10 ; i++)
に書き間違えまくるので、
for(i = ZERO; i <= 10; i++)
に・・・とか思いかけましたが、何もうれしくないしこれ。むしろ、
#define ICHI 0
for(i = ICHI; i < 10; i ++)
で、「配列添え字が0から始まる」に慣れてない人の苦し紛れで何も解決できない工夫・・・とかの方がまだしも。
#define TRUE -1
#define FALSE 0 とか
これが意図するところは… (スコア:0)
マジンガーZって結構さやかさんがエロかったし(違)
Re: (スコア:0)
# char array[0];って宣言したいんだけど文法的に許されないから、array[1]にする。
Re:行数とか見た目の問題ならまだマシ (スコア:1)
gettextのコードが常識かどうかは知らないが、それは最低限コメントに書かないといけないものだと思うよ。
/* iが0から10の間繰り返す。 */
for (int i = 0; i 10; i++) {
}
Re: (スコア:0)
コメントでは10はinclusiveに見えるのにコードの方では(<が消えたと仮定して)10がexclusiveな件。
かえって混乱のズンドコに突き落とされるようなコメントなんかない方がマシです。
ていうかコードの内容を繰り返しているだけのコメントなんかいらないので0と10という数字にどういう意味があるのかをちゃんと書いてください。
件の「#define ZERO 1」も可変長配列のためだというコメントはちゃんと書かれてるよ
Re: (スコア:0)
それなら、今のgcc独自拡張やC99では、そのような目的のために構造体の最後のメンバにchar array[];のような要素数指定のない配列を置くことが認められているので、ゆくゆくは消えることが期待できますね。
#まだ使われているところを全然見たことがないけどorz 普及するんだろうかC99
Re: (スコア:0)
Re: (スコア:0)
バイナリのプロトコルスタック実装すると構造体中のarray[1]は便利な気がするよ。