2GET!!!!!!!!!!!!!!!!
goto >1;
/*
*/ /*
*/ if(投稿者 == 今日も午前様) { /* すれ住人が今日も午前様だった場合 */ } else if (投稿者 == 今日も自宅警備員) { /* ニートの場合
#if 0
#define O 0
こんなコード↓言語はC struct_very_long_name_array[data_position[i]].long_long_name_member = struct_very_long_name_array[data_position[i]].long_long_name_member + very_long_name_temporary_integer_variable; ま、、まずは += 使ってみようか...
>9 ぽんぽん、と肩を叩きながら「少し、頭冷やそうか……」って言いたくなるコードだ レガシVBだと+=の類がないからってんでその手のコードがわんさかorz
while ( 0 != hoge()) ) { i= getHoge(); if( i< 0 ) { setmsg(); return -1; } if( count> MAXCOUNT) { setmsg(); return -1; } count++; } ううう、まじで何やってんのか、意味わからん。 if(hoge()){ setmsg(); return -1; } これだけで済むのに・・・。頭痛い。
それがわかんないなら、プログラマ辞めたほうがいいよ
12様が解説してくれるそうです
引数があるのかないのか、わからないけど、こんな感じなんでしょ、多分。 int hoge() { if (timeout_or_fatal_erroroccurred) { return -1; } return 0; } int getHoge() { if (timeout_occurred) { return 1; } if (fatal_error_occurred) { return -1; } return 0; } void setmsg() { // set error message to log or something else } で、そのコード自体は、 ・hoge()が正常終了したら終了 ・hoge()で異常終了したら、即エラー終了する ・hoge()でタイムアウト(例えば、だよ)が発生したらMAXCOUNT回までリトライする ・リトライオーバーしたらエラー終了する
フラグを間違えてトートロジーになってるコード見た時にみんな疲れてるんだなと思った。
17 :
15 :2007/10/18(木) 15:29:01
中身が全然違うよって反論は受け付けないよ。
違うんならそれがわかるように
>>11 の時点で書かなきゃ。
少なくとも「これだけで済む」はずがないのは明らか。だって、getHoge()してないじゃん。
いや、全然違うんだが。
>中身が全然違うよって反論は受け付けないよ。
>違うんならそれがわかるように
>>11 の時点で書かなきゃ。
じゃあ何もわかってない奴がやめろとか言うのもも同類だな。
何もかかれて無い時点で判断してるし。
つーかそのタイマーの使い方なんだよ。
そんなコードがsleepもなく動くと思ってるのか。
そのコードこそ辞めたくなるわwww
ちなみにhoge()は何も待ってない。ただメモリ内にイベントがあるかチェックしているだけで、ノンブロック。 だからイベントが無いときはカウンタがMAXになるまでフリーズ状態になり、他のスレッドが全部死んでる。 んで、ウォッチドッグリブートするバグ。客先でえらいことに。 #他部署の火消し中
なんか見苦しい。 読む気しないし。 やめた方がいいよ、やっぱり
21 :
15 :2007/10/18(木) 15:54:27
ということは、
>>11 のコード自体が悪いわけじゃないのでは?
hoge()とかgetHoge()とか、setmsg()の内容自体が悪いんじゃないの?
というか、全体的に程度低い感じもするけど、それはまた別の話。
ノンブロックって何さwww
なんのSleepもブロックもしないタイマー参照するループ処理かいといて他人の程度を云々するとはね
non-block の検索結果 約 161,000 件中 1 - 10 件目 (0.16 秒)
必死すぎて笑えるwww
どこからSleepの話が出たんだ?
"ブロックするタイマー" に一致するページは見つかりませんでした。 検索のヒント: * キーワードに誤字・脱字がないか確認します。 * 別のキーワードを試してみます。 * もっと一般的なキーワードに変えてみます。
Sleepもブロックもせずにタイマー参照するループ書くようなヤツがいる会社は辞めたほうがいい、という話だな。
ブロックって何さwww
なんだブロックするタイマーって。 日本語区切るところ間違えてますよw どう読んでも ブロックもしない、にかかるのはループ処理ですが。 日本語もまずいのか。 つーかブロックも知らんやつがなんでここに居るの?
31 :
15 :2007/10/18(木) 16:11:36
いや、疑似コードなんですけど・・・ まあ、どうでもいいです。降参。
>>29 socket ブロックする の検索結果 約 10,800 件中 1 - 10 件目 (0.16 秒)
"ブロックしないループ" に一致するページは見つかりませんでした。 検索のヒント: * キーワードに誤字・脱字がないか確認します。 * 別のキーワードを試してみます。 * もっと一般的なキーワードに変えてみます。
ブロックしないループのどこが悪いんだろう?
多分ビジーループのことだと思う。 ブロックする/しないのどっちがそれかわからんけど。
それ、googleの使い方が悪いだけだから。 つーか、ブロック/ノンブロックという用語はあっただろ。それについて釈明しろ。
ブロックやSleepしないループは別に悪くないだろ。 でもそんなかでタイマー参照するのはどう考えてもまずいだろ。意味が無い。
コンテキストスイッチが起こらないループを書くなと言いたいんだと思う。
>>28 > Sleepもブロックもせずにタイマー参照するループ書くようなヤツがいる会社は辞めたほうがいい、という話だな。
ブロックするの使い方間違ってますよ。
40 :
仕様書無しさん :2007/10/18(木) 16:26:35
>39 じゃあどう間違ってるのかと正しい用法を以下に↓
仕事しろよ
ブロック・ノンブロックという用語があることがわかったら、 今度は用法についての指摘にすりかえ、 それも出来ないとなると、しまいにゃ仕事しろってか。 見事だな。
こいつと仕事したくないわ、マジで
様々なケースに備えたエラー処理の例だな
うーん、ブロックは動詞じゃなくて形容詞/形容動詞としてしか使ってこなかったんだけど、 そこまで言われると、俺の方が間違ってる気がしてきた。 正しい用法は示せません。ごめんなさい。
後付け情報でファビョるいい例
ビジーループ内ではイベントの参照や他スレッドによって変化する値の参照はしてはいけないね。 常識だと思ったんだがそうでもないのか。
話が完全にすり替わっててワロタ
しっかし、うまくすりかえたな. ヘタなコード晒したのがつけ込まれたな. ま,最初のコードからはなんともいえんな.中身見ないと.
C++のクセにカウンタ専用変数ををいちいち先頭で宣言かよ。 しかもshort使うなよ。むしろおせーよ。 あと、#ifdefの嵐でどれが生きてるのか死んでるのかよくわからん・・・。
// XX/XX オプションの意味を変更(要件票xxx) // XX/XX 前項取り消し // XX/XX やっぱり0がアリで1がナシだとのこと // XX/XX 戻った // XX/XX 今、逆にしてます。もう変えるなよ、絶対に変えるなよ! // XX/XX 何だかワクワクしてきた if (!!!!!!option_installed)
びっくりだよ
option_installedという名前なのに アリになったりナシになったり出来るのがすごいな。
辞めようと思ったはずなのに辞めろと言うと切れる件について
この手の話の場合はIDあったら面白いのになと思う。
>>11 のコードってコンテキストスイッチは起こらないの?
global_variable++ってだけのコードでもアトミックになる保証は無いから、排他かけろって教わったんだけど・・・
>>57 起こらないという保証はないため、起こると困るのであれば排他制御する必要がある。
必ず起こるという保証もないのは言うまでもない。
きっと Windows3.1 なんだよ…
ビジーループ内でタイマー参照か。最近の新人はすごいな。
タイマーって何だ?
>>11 どう考えても、それだけで済むはず無いんだが
>11 ビジーループでどっちにしろ同じ処理を通らないと抜けられないんだから それだけで済むじゃん
やべえ、俺ゲロ吐きそう、この流れで
遠慮なくそこらに吐けばいい
「それだけで済むじゃん」とかいって、勝手にロジックを変えて「りふぁくたりんぐ〜」とか勘違いして プロジェクトを混沌に陥れる奴っているよな
>19
なんだか「俺すごいだろ」的な主張をしてるような気がするが、客先でえらいことになるような チームにいる時点で、お前も含めてダメチームなんだからな。
>#他部署の火消し中
日本語が不自由連発ワロス
とある関数。 Ret = FuncAbs( stDat, stDat.code, stDat.name ); 二つ目と三つ目の引数は、一つ目の構造体のメンバなのに・・・・なぜ別々に宣言する('A`)
>>75 この時はたまたま同じ構造体のメンバになってるだけで、受け側では別にそうなっていなくてもいいんじゃないの?
これを見ただけでは別におかしくはないな
それよりもabsという名前でその引数は気になる
Absは絶対値という意味なのだろうか それともエアバッグシステムなのだろうか
絶対領域
あべし
それはABC
他のところの呼び出すところで Ret2=FuncAbs(stDat2, code, name) となってるから。codeもnameもstDat2のメンバでないものが呼び出す可能性がある。 汎用的な関数にしたければそうする。
>>11 のように変換できる条件って何?と考えると少し真面目な議論になるかも。
hoge(), getHoge() が副作用を持たない
hoge(), getHoge() が非局所変数を参照しない
count の生存区間が while ループの後ろに続かない
これで十分かな?
意味を変えないように書き直すなら、こんなところでしょか。 for ( ; hoge() == 0; count++) { if (getHoge() < 0 || count > MAXCOUNT) { setmsg(); return -1; } } hoge() == 0 と書くか !hoge() と書くかは hoge() の「意味」が bool なのか int なのか判断できないから保留 i は局所変数だろうと勝手に解釈して省いた。 本来は count と同様に i の生存区間についても前提が必要だね
っとケアレスミス。hoge() != 0 か。連投スマソ
投稿前に見直しもできないような
慣れた俺でもDirectXの名前付けはムカつく Microsoft系のコードはどうしても好きになれない
>>87 十分なわけないじゃん。
つか、つかその議論意味無いと思うぞ。
93 :
仕様書無しさん :2007/10/21(日) 18:24:54
if( 判定条件 ){ errorflag = 1; } errorflag = 0; /* エラーチェック削除 */ コメントつけるくらいなら、if文ごと消せよ・・・。
副作用のあるgetHoge()なんて書く奴がいるのか?
まだやんのかよ
人々がよくやるミスは、真のバカのバカさ加減を過小評価することだ。 --D. Adams
>>11 のどこにこれだけレスが増える要素があるのか、さっぱりわからない。
errorflag=0の行がそこにあるのがバグかもしれんぞ。 つか「糞コード」示そうぜ
そうか、if 文以前のエラーチェックも無効化するんだな
(i) 局所変数ハァハァ
局部変数と呼びたくなる
広辞苑で単語探してどきどきしてたころのようにほろ苦い
確かにセンスが一番重要。俺の見てきた限り、PGをやっている奴らのレベルは明らかに三つの山に分布している。 −85% 糞の山製造装置。センス皆無。つき合うだけ時間の無駄。 −10% 普通。興味はないが頭の良い奴。センスはないが教育で知識を付ければいくらでも補える。 −5% 極めて優秀。PGに興味があり、自分で経験を積んでセンスを研いてる。放っておいても成長する金の卵。 優秀な奴が1人いれば普通の奴5人分の仕事をし、糞の山製造装置は捨てるべき糞しか作らない。 糞の山製造装置の平均レベルは「制約が増えるからカプセル化は悪!constを付けた馬鹿は誰だ!」とか、 「関数/変数の名前と中身があっていない?はーそれがどーかしましたかー?」とか 「パラメータで機能が切り替わるマジカル関数、只今参上!コード短くてう・つ・く・し・い!」とか、 「俺仕事したっすよ!コピペだらけ?何言ってんの!コード量多い=仕事したってことでしょ!!」とか、 「今日の仕事は、この関数をコンパイル通るようにしたことです!」とか。 糞の山製造装置の矯正を試みたこともあるが、チンパンジーに微分方程式を教えている気分になったのであきらめた。
(゚Д゚)y一~~ で? |\へ _| ̄|○ ̄l
レスする奴は明らかに三つの山に分布している * 一瞥して読まれずにスキップされる奴 * あとはいいよね
>>106 >糞の山製造装置の平均レベルは「制約が増えるからカプセル化は悪!constを付けた馬鹿は誰だ!」とか、
>「関数/変数の名前と中身があっていない?はーそれがどーかしましたかー?」とか
>「パラメータで機能が切り替わるマジカル関数、只今参上!コード短くてう・つ・く・し・い!」とか、
>「俺仕事したっすよ!コピペだらけ?何言ってんの!コード量多い=仕事したってことでしょ!!」とか、
>「今日の仕事は、この関数をコンパイル通るようにしたことです!」とか。
12年間SEやってるが、こんなこと言うやつ見たこと無いぞ
1から育ててる人材が多いからかもしれないが、こんなこと言っていい空気がある時点で職場環境が悪いとしか…
SEだから知らないんだよ。 PMかプログラマなら知ってるはず。
>>110 いやPGもPMもたまにやるけど、こんな奴いたら浮きまくるけどな
浮きまくるかどうかは、職場の雰囲気やカラー次第。 いるかいないかとは別問題。
先日まで居た田舎の中小はそんなのばっかだったが。
言わせない雰囲気は重要だな
口に出すかどうかは別にして、心の中で思ってる奴は多そうだな
>>116 こんなこと考える奴は無神経だと思うから
すぐ口に出しそうだけどな
昔居た会社の社長がプログラマでそういう人だったよ
うちだとそうじゃないやつは浮いてる
プロとしての能力を殺してバカにあわせるのも協調性というものか
一昔前はさ、偉いオサーンはなんも解ってない素人だった 最近は、昔COBOLやBASICやってた技術屋あがりもいるし そいつらが技術屋として尊敬できるレベルとは限らないよ 古い技術しかしらなくても、話せる人はいるけどね
過去のソースがすべて#if 0〜 #endifで残されている。 読みづらいったらありゃしない。 cvs使ってる意味が無いだろ! せめて/**/にしてくれ!
#if 0の意味って何だろう…… 最近、考えれば考えるほど分からなくなってきた。 とくに、試行錯誤の過程とかが意味なく#if0されてるとマジ訳わかんねー…… せめて、動作確認した奴だけをコメントアウトしておいてくれよ。お前の書き間違いなんか興味ないんだよ
/* */はネストできないけど#ifはネストできるからじゃないの? それが良いかどうかはともかくとして。
>>125 というかな、コメントアウト自体よく分からんのよ。
本当に……明らかなテストコード(それも、書いた本人しか使わんような奴)がコメントアウトで残されてたりさぁ……
何でなのよ本当に……
ていうかcvs使ってるなら気付いたお前らがガツガツ消してけばいいとおもうお まぁそんな奴の書いたコードは全面的に信頼できないが
適当に修正してみて、うまくいくかどうか試すといったやり方をする人は、 ソースのコメントアウトを多用する様です。 MISRAルールでは、ソースのコメントアウトは禁止してるけど、#ifは認めて いたような覚えがある。理解不能。
消すことが不安だった連中がそのまま偉くなったから、に10000ガバス
改修いれるたびに前のコードコメントでのこさなあかんってひでえよなあ 変数の名前変えなきゃならなくなったときに置換使えず一行一行コメントアウト&名前変更で泣きそうになったさ 今、その名前の変更が正しくできてるか確認中 答えのない間違い探しやってるような気分
do{ } while(0) ってなんだよ・・・。担当者ぬっころしたい。
ああ、break使いたかっただけか。マクロは無かった。 嫌なソースだ。
だんだん沸点が低くなっていますね
標高が上がってるんだろ
一瞬 do{ ... }while(1) なら悪くもないんじゃないかと思ってしまった。
goto使用禁止とか短絡的なルールがまかり通ってるなら breakで抜けるというのは多段ネストを避ける効果的な抜け道だな 参考にさせてもらおう
for{ for{ for{ if{ flg=TRUE; break; } } if(flg) break; } if(flg) break; } こういうの嫌〜い
あ、ここはループか。ふむ。こういう処理か・・・ と思ったら最後に、ループじゃないと気付く。 なんかむかっと来る。 素直にgoto使ってくれ!
関数に分ければいいのにね
マクロでならまぁテクニックとしてアリなんだけどなぁ、一度きりのdo。
ソースコードじゃなくて単体試験なんだけど、 hoge = new Hoge(); のラインで hoge に Hoge のインスタンスが生成されていること みたいなことをやってる人がいて理解に苦しむ。 (プログラム中の独自クラスのインスタンス作成部分全箇所でインスタンスの作成結果を試験として確認している) デバッガ使ってステップ追ってダンプを見てるみたいだけど、 そもそもインスタンスが作れなきゃすぐエラーで落ちるようなロジックになっている上に、 DBアクセスしたりファイル操作したりするわけでもないから、実行→終了時の標準出力を見るだけでいいはずなんだ。 確実に試験項目を増やす目的のためだけにやってるように思えるんだけど、 ソース流し見しただけでも分かるようなロジック抜けや試験項目の抜けが多いんだよね。 インスタンス生成に限って確認する理由ってあるのかな。
>>142 そういうテスト項目を求められるから
新人のときそういうの以外の項目あげたら怒られた
あれから7年たったが体制は変わってない
>>142 Hoge の生成で例外が飛ばないことをテストしてるんじゃないの?
コンストラクタで例外出すようなコードって嫌だな。
爆弾発言
コンスラクタでリソースを確保するようなオブジェクトでは、 リソースが確保できなかったら例外をスローするよりほかにあるまい。
確かにテストファーストがどうこう言ってたな。 現場でテストケース最初に書いてる人なんていないのに。
アチャー
俺はmakefileを最初に書く
makefile/automake/cppunit/cvsなんかの環境設定が一番面倒だな 書き始めると気が楽になる
>>147 C++でそれやったらぶん殴るけどな。本気で。
>>153 リソースって色々意味があるからピンとこないが、固定配列とかも含む?
それならC++でも使うよな?
特にネットワーク系でヘッダやら固定byte長のデータ部なんかの構造体の属性なんかそうだし
>>153 std::ifstream や std::ifstream を否定する立場だね。
Exceptional C++ は読んだ?
>>153 なぁ、newって例外投げるって知ってる?
char* p = new char[1024];
これが例外投げるなら、
Foo* p = new Foo();
これが例外投げても、普通でしょ?
例外 彡 (,,ノ゚д゚)ノ
>>153 はコーディング規約で例外を使用制限か全面禁止
にしてそうだな。
理由は自分が理解できないから。コボラ上がりの
エロい人が多いってほんと?
話わりこん悪いけどDelphiで数千行にわたってコメントなし、 関数・変数意味不明(おまけにスペル間違いだらけ)を渡されて、あとよろしくって… UML書いて、C#で書き直す。 気力がなくなってきた。
>>159 そのコードがどこまで動くものなのかは知らんが、
長い間アップデートを重ねていくうちにぐちゃぐちゃになったんなら
ソフトの挙動を見ながら仕様書を書き起こして新たに作り直す
新規プロジェクトだけどクソコードの嵐なら
仕様書見ながら新たに作り直し
これで決まりじゃない?
言語は客指定のものか、何でもいいなら一番得意なやつでやればいいと思う
>>160 3社共同でやってて言語はばらばら、俺の得意はC++なんだけど…
一社はDelphi、もう一社(ドイツの会社)はC++2003+アセンブラ、うちの会社はC#で書けと。
ちと困った。ちなみに顧客はうちの会社だったりする。
>長い間アップデートを重ねていくうちにぐちゃぐちゃになったんなら
そのなかに俺のCコードがコメント消して取り込まれててワロタ。
まあ、来週なんとかするさ。
例外は投げていいけど例外処理入れてなかったら意味ないな
>>155 標準ストリームはメンバ関数 exception() でマスク指定しない限り例外投げないでしょ。
164 :
仕様書無しさん :2007/10/28(日) 20:37:50
int hogeFlg = 3;
>>161 いまいち分かんないんだけど
共同でやってるうちの1社(Delphi担当)がクソコード置き逃げしたって事?
それとも自分の会社の前任者がルール無視してDelphiで書いたクソコード置き逃げしたって事?
>>165 半分当たり。
・前任者(7年以上前)が委託してそのプロジェクトはDelphiがスタンダードに。
・ちょこちょこ、前任者が改良という名のカオスをつくる。
・ドイツの会社と共同開発でVCに半分移植。しかもとスピードが必要なところをアセンブラに(x86)…
・前任者異動…
俺のところにツケが。
あれっ、カオスを作ったんだから、半分はうち会社の責任か…俺は関係ないけど。
まあ、そういうののおかげで、たくさん言語は覚えたから、まぁ良しとするか。
167 :
166 :2007/10/28(日) 21:43:16
>>166 あぁ、忘れてた。機密保持の関係で他社のソースのすべては見せてもらえないのですよ。
一部の開示みたい。
なんだよ、それ。
>>9 コーディング規約で「+=」禁止だった・・・
バイナリだけの提供なら、それが何言語で書かれてるかなんて関係ないのでは?
170 :
166 :2007/10/28(日) 22:32:05
>>169 たしかにそのとおり。でもちゃんとした仕様書がアレなので。(俺のせいじゃないぞ)
引数とかいまいち規則性が無いうえに、あんまり書けないけど、データフォーマット
も機密に引っかかってちゃんと教えてもらえない。
だから、推測でプログラムしてる!
まあ、元のヘッダ(ヘッダファイルは公開OK)でもこんな感じだ。
DCT1_1024 (aa,bb,cc,dd)
DCT2 (aa,bb,cc,dd,ee)
DCTa1 (dd,ee,ff,time)
DCT2a (a,b,time,freq,aa)
ReadData512 (block,i,g,r)
color_iro (r,g,b,n)
一見わかるようでソースみるまでわからない。でも辞めずにがんばってみる。
ドイツのは10倍まし。てか、せめてDLL版の中身くらい教えて欲しかった。
俺なんかデバッガで使用不可にされたDLLしか渡されなかったんだぜ・・・
解析の技術ばっかりあがりそうな環境だな
DCTって離散コサイン変換なのか。 いや、だとしてもワケワカランが。
高速フーリエ変換とか高速DCTのコードがそんな感じなのは 世界中どこへ行っても大差ないと思う。 というか数値計算のコードは教科書読むなどソース読む以外の 学習法をとらないと完全なる時間の無駄。
>というか数値計算のコードは教科書読むなどソース読む以外の >学習法をとらないと完全なる時間の無駄。 日本語でおk、だなこれじゃ。↓のようなことを書きたかった。 数値計算のコードを解析するなら、教科書読むなどソース読む以外の 学習法をとらないとダメ。いきなりソース読んでも時間の無駄になると思う。
そりゃそーだ
状態をチェックするのに、すべて定数との比較。 if(mode==2)とか。 2がなんだか知らねえっつの。いちいち設計書見なけりゃならん。 static constや#define知らんのか。
すまん、即値のことか。
設計書に書いてあるだけまだマシ
ビットマスクが10進法で書いてあった。 1ヶ所だけ立ってるならまだ読めなくもないが、 複数箇所チェックのマスクを10進で書くとか狂気の沙汰としか。 何でそんな書き方したんだか。 暗算自慢か?
読む気が起こらなくなるようなひどいコードには、知識のない奴が下手に触って悪化させるのを防ぐ効果がある
182 :
170 :2007/10/30(火) 19:50:59
>>175 いや、FFTとかは自分でもやってたから分かるんだけど
その先の処理が魔界になってるんだよ。
if(mode==2)なんて当たり前。しかも設計書もコメントも無いんだぜ。
>>181 前にわざと分かりにくいコード書いてみたら、数ヵ月後に手を加える
事になって後悔した…
>if(mode==2)とか。 今まさに同じようなコードを見てるんだけど、 試験項目を見ると mode=2 のとき、なんて書き方をしてるんだよね。 ステップ実行できる言語ではあるけど、そんな試験方法普通するか?って感じだよ
>>183 なんかゴメン。
先月すげー忙しくって、まさに if(mode==2) まんま使ったわww
同僚におんなじ様なこと言われた。 さすがにコメントは書いといたけど。
GlobalAllocを使いまくってるソースコードを見た。 普通にメモリ確保するだけのときに、GlobalAlloc。 何のおまじないだろう…… GlobalAllocの利点って何かな?
8バイトアラインとかヒープの移動とか、古いDDEとか互換性とか考えたけど他で代用できるよな。 最近のソースなの?じゃなきゃ、その人の癖なんじゃ。 VC++4時代に他のやり方をよく知らなくて、使ってたレベルの俺だけど。
if (i == 0) sprintf(c_number,"0000"); if (i < 10) sprintf(c_number,"000%d",i); if (i < 100) sprintf(c_number,"00%d",i); if (i < 1000) sprintf(c_number,"0%d",i); else sprintf(c_number,"%d",i); ……氏んでください。 氏にたくなければ、%04dを覚えてください。
ひでぇw
これは凄いw
ん? if(i==0)の行が不要なだけだろ?
if( Data == 1 ) { Ret = DataCalc( Data ); } else if( Data == 2 ) { Ret = DataCalc( Data ); } else if( Data == 3 ) { Ret = DataCalc( Data ); ・ ・ ・ } else { Ret = DataCalc( Data ); } なんだろう、このわき上がる激情はw
ステップ数稼ぎ?
>>191 きっと後で個別の処理を追加するつもりだったんだよ、そうに違いない
ifの中に処理があるだけマシかな と空のif文見ながら思う わざわざand条件5つも並べて何がしたかったのだろう……
for(int i=0; i < reccordCount; i++){ rec = getRecord(i); switch(i){ case 0: var_0 = rec.hoge; foo_0 = rec.fuga; break; case 1: var_1 = rec.hoge; foo_1 = rec.fuga; case 2: var_2 = rec.hoge; foo_2 = rec.fuga; break; case 3: var_3 = rec.hoge; foo_3 = rec.fuga; break; (以下最大レコード数までつづく、20くらい) } } 本当はDelphiなんだけど、Panelをグリッド上に並べて 検索結果を表示する処理。 メンテで死んだ。特に表示項目追加で。 IDE上でコンポーネント名付ける所から死んだ。
>>195 はなぜ配列使わんのかパターンだけど
最近みたのは逆になんで配列使うのかパターン。
Hoge[] value = new Hoge[3];
if(hogeFlag){
value[0] = foo;
}
if(fugaFlag){
value[1] = foo;
}
if(barFlag){
value[2] = foo;
}
その後ループでまわしたりといった処理は全くなし。
それぞれがどういう意味のvalueだかわかんねー。
意味が判りやすい名前つけて別に宣言すれ。
因みにこの人、後輩に「ソースはもっと綺麗にかけ!」とか
説教していたのを俺はしっている。
5つの機能が1つの関数に纏まってて、沢山のフラグで複雑にいくつも分岐してた。 非常に読みづらい。 ここまで複雑するくらいなら素直に5つ関数作れよ、と思った。
関数を増やしてはいけない特殊な事情があったんだよ! タブン
ソースきれいに書け!って常々言いまわってる奴こそ汚いコードを書く ifを書いたら必ずelseも書けとかワケワカランとですよ
きれいにかけ=おれるーるでかけ だからな
変数名とかが長たらしいとウザイ
しかも変なローマ字な上、中途半端なハンガリアン記法だと
適当な空行や空コメント行を入れずに ぎっちぎちに書く男
100%男だから 自分は勉強してると思い込んでる
この業界の男女率考えたらそりゃまぁそうなるだろ
>>185 うちはVirtualAlloc
malloc使うと怪訝な顔される
詰まってる方が読みやすいんだけどなぁ
適度な行間は必要だけど1画面ごとに機能がまとまってると有難いね
for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { for (k = 0; k < 10; k++) { if (x[i][j][k] != -1) { …… } if (x[i][j][k] != -1); } for (k = 0; k < 10; k++); } for (j = 0; j < 10; j++); } for (i = 0; i < 10; i++); これが噂に聞く、中括弧の対応をわかりやすくする テクニックとかいうやつか……ってアレ? //はドコー?
こいつはすげえ
forはまだいいとしてもifはこえぇなw
つーかなんでわざわざセミコロンまで付けてんのw
これは酷い
後半すげー。まあ動くからいいけど。 まだ、辞めるほどではないな。
「//」の2文字よりも「;」の1文字のほうがタイプが少ないからとかいう理由だったら笑う
何でこれで動くんだ?って思っちゃうコードだな まぁ動くけど
昔の、forループでウェイトをかける時代を思い出した
>>219 単純に無駄処理をforでたくさんやってsleepみたいなことをしたってだけだ。
まあコンパイルすれば最適化して消えるだろうけど・・・
>>213 よく読め。このコードにセミコロンは必須だぞ。
コメントにしてくれとは思うけどな。
いや普通に考えると // の付け忘れだからエラーが出て気付くはずなんだけど そこでなぜわざわざ ; を付けてエラーを回避してまでコメントでないforを入れたのかと
//の付け忘れ、ではないと思うなぁ。 たぶん何か根本的に勘違いしているか、妙な教育を受けてきたかのどっちかじゃないか。
do〜whileと混じってるんじゃね?
perl 使いかも…。
こんな変な書き方する奴を「〜使い」とは呼びたくないな。
void swap(int a, int b) { int tmp; tmp = sort[a]; sort[a] = sort[b]; sort[b] = tmp; } 最初見たとき、こいつは値渡しを理解してないのかと思ったが ある意味もっとひどいかもしれんorz
いい加減、コンパイルすら通らないようなコードさらすのやめようぜ
int sort[] はグローバル変数なんじゃない。だから一応はコンパイルできるんじゃね。 多分ひどいのはそれと、配列のためだけにスワップつくってることかなぁ。 関数名もアレだが。
int sort[] を sort する時に使用する swap() なんじゃね
せめて static
で、バブルソートしていそうなsortの要素数は?
10
最近、周りが変なコード多くて、もういいや的にテキトーに糞コード書いてる。デフレスパイラル。 自分一人でやるのだけは、ちゃんとやるようにした。
それ、自縄自縛じゃないか? チーム内でコードを樹海みたいにしてどうする。w
自分だけがまとも(本人が思ってるだけかしれないが)で他の人がダメなので腐ってた。 来週からはみんなに声かけて、がんばって見るよ。 話は変わるが、リアル樹海行ってきた。服・靴とか抗鬱剤落ちてるし、深いとこ行くと 薮と木が多くて進めない。なるほど自殺の名所になるわけだ。
影はあるかい?
えっと、どの影?
自分の影さw あるいは鏡に映るかい?
あれっ、なんか2つある。でも鏡はらき☆すたの練習したからダイジョブだった。 さあ、話をソースに戻そう。
そんなに思う通りに行かないのが世の中。
>240 「かがみ」だけにらき☆すたってか ……失礼。 自殺の名所かー。東尋坊の遊歩道で3時間ぐらい眼下の岩を見てたことがあるな……
東尋坊の遊歩道は静かでいいよね でも死ぬのにはいまいち高さに不安があったからジャンプするのはやめといた 後で知った話だけど、あそこで何度も死なずに(つか自殺目的じゃないんだけど)ジャンプしている人がいるらしいね
245 :
242 :2007/11/04(日) 00:17:16
俺は一応。 まぁ死にぞこなったどころか、飛べもしなかったんで今こうやってカキコしてるわけだがorz 無理矢理スカタンなソースに話を戻すと 履歴コメントの方が実効コードの5割り増しの行数ってソース渡されたので とりあえずSubverionに全部突っ込んでから履歴コメントごっそり消した(´・ω・`) いやー、ロジック追うのが楽になった、つかあのままじゃ追えん。 「履歴コメントは入れ子の入れ子になったらまず復元できない」って何故分からんかな。
Javaで意外によく見る、こんなコード XxxBean xxxBean = (XxxBean)xxxList.get(i); xxxBean.setXxx(a); xxxList.set(i,xxxBean);
>>246 まあそれ自体は害はなさそうだけど
参照の事わかってなくて
他の場所でやらかしてそうだなあ。
setXxx(a) が set)(xx(a) に見えて Javaは奥が深いなーと2時間ぐらい思ってたww
>>246 JAVAよく分からんのだが、3行目がイラネってこと?
それとも、
( (XxxBean)xxxList.get(i) ).setXxx(a);
の1行でいいってこと?
やっぱりCは必須なのか、 参照とオブジェクトの違いを教える人間がいないのか・・・
>>249 3行目が、いらないってこと。
まぁ会社やめるっていうのは、大げさだけど、
こんなコードを書く奴が2,3人まじってると、
プロジェクトの前途に暗い物を感じるね。
>>251 つーか、Listを使い回すというのがキモイ。
3行目は、新しいListのインスタンスにBeanをセットするべき。
そんな釣りd
>252 ぷぎゃー
Javaのプロジェクトの終盤で、ListやMapからgetするときは必ずclone()せよという、 偉い人からのお達しが突然出たことがある。
>>255 多分一部のバカのミスのせいで
そうなったんだと思うけど
バカに言って聞かせるより、
バカ規約を作った方がいいって
発想が偉い人の絶望し切った心が
伺えて宜しい。
SWING+EJBでアプリを作っているんだけど、イベントトレース図はおろかクラス図すら作ってないんだけど。 ソースを作る前に辞めた方がいいかなw
一人を改善させるよりも全員のための規約を作るほうが仕事をした気分になれるから
自分で作ればいいじゃん
javaの開発でクラス図が無いって信じられないんだけど。 実はそういう開発って結構あったりするのかね。
>>261 クラス図なんか描かないなあ。
つかUML使わない。
java は業務系で昔ながらのウォーターフォール開発、 ドキュメントは一通り作る、っていうイメージがあるなぁ。 何か変えるには変更管理票出してレビュー受けて、と。 リファクタリング?それ食べられますか? って感じ。
>>263 そういうところに出向したことあるけど
UML使わなかったですねぇ。
全般にわたってあまりナウいこと
やりたがらない。
昔ながらの仕様書でしたよ。
古い皮袋に新しい酒を入れる愚行
ウチはウォータフォールのつもりで結果スパイラルモデルになってる。悪く言えばデスマ。
OOP開発なのに、関数仕様書書かされたことある。書けねえw
コード読めない素人は資料って言って、うるさいんだよね。
資料があれば素人の自分もコードを理解できると期待してるんだろうが、ねぇ。
バグバグでそのうち、資料と実装が合わなくなるだけなのに
誰も資料なんか読まないから大丈夫。 あれはただの納品物だから。
で、仕込まれてるのも見破れないとか?
詳細設計書画、全然詳細設計所になってないことが良くある。 やりたいことをどう実装するかは、結局プログラマー任せ。 設計書レビューなんてしても、指摘されるのは形式とか言葉遣いくらいだもんな。 それも人によって言うことが違ってくるし。
以前、詳細設計書見てて激しく萎えた。 こんなのソースにちゃんとコメント振ってたら必要なくね?って思た。 そんなボクは3流ですか?
そんな仕様書を書く組織で、きちんとしたコメントを付けられると思いますか?
結局、レビューとかもやってないのと一緒なの?
レビューなんてやったことねーな……マジ不安になるよ。
進捗管理してる人はコード見てるんだよね?
進捗管理している人がコードを見たとして、何が書いてあるか理解できるわけ無いだろうw
え、それが現実なの?
保証部は詳細設計までは見ないんで油断してたら、 トラブったときに他の技術部とコードレビューやって 実装と違うとエライ怒られた事は有るなぁ。
進捗管理している人はステップ数だけみてるから、どんな言語で書いてあろうが大丈夫。
進捗管理って、人を監視してさぼってるか忙しそうか見るのが仕事でしょ? キーボードを一生懸命叩いているように見えればそれでOK。
そんなの見てないだろw 報告書の数字だけだよ
上司に言いたかった事 * どうしてそんなにソース管理ソフトを敵視するのですか? * 進捗会議は1ヶ月に1回でなく、せめて1週間に1回にしませんか? * int date1, date2, date3, date4, date5, date6, date7; これを配列変数に直してはならない理由を教えてください。 * 共通関数などプログラムの土台部分に関する作業は評価ゼロですか。そうですか。 * コードレビューやテスト自動化の有効性について、何回説明したら理解してくれるのですか? * 仕様書、作りませんか? * 上司のとるべき行動っていうのを研修で教わったはずなのに、それと真逆の行動を 取るのはわざとですか? * イヤホンの音漏れが酷いので、仕事中に音楽を聴くのはやめてもらえませんか? * 香水がきつすぎて気分が悪くなるのですが。 * エアコンの温度設定は女子限定なんですか? * エコヒイキやめません?
285に言いたいこと * スレタイをよく読んでください
ごめんよ
>>285 をソースコードに書いておけば、後任の人が会社を辞めたくなるYo!
OracleDBでバッチ処理書くのにPro*C を使っている。 理由は速いからだそうだ。 でも、折角のインデックスに無駄な演算して効かなくしちゃったり、無駄な関数呼び出ししまくったり、速度求めてるとは到底思えない。 しかもソースはキタネエし、バグがあって数年分、誤データ蓄積しちゃってる。 たまたま使ってないカラムらしく誰も気付かなかったらしいが、来たばっかりの俺が見付けちったゃ。 察するにCとかOracle以前にプログラミング自体初めてじゃないかってレベルだった。
でも運用に入って何年も経ってるから修正は難しいとか言われちゃうんだよね。 公式仕様書嫁とかRFCは見たかとか言う割にそっち方面の抜けが多いとかやる気なくすよ。
会社だからね
修正で儲かるとか具体的なメリットないとね。
char fileName[260]; みたいな文字列をVC,WinXPの環境で見たことがある…… さて、文字列サイズはこれで足りているのだろうか?
そんな長い名前付けんな禿 はい、次。
crt/limits.h #define PATH_MAX 512
windef.h @VC8 #define MAX_PATH 260 260なんて書いちゃってる時点でダメだけど >そんな長い名前付けんな 長い名前…??
長いファイル名
平成十三年九月十一日のアメリカ合衆国において発生したテロリストによる攻撃等に対応して行われる国際連合憲章の目的達成のための諸外国の活動に対して我が国が実施する措置及び関連する国際連合決議等に基づく人道的措置に関する特別措置法の一部を改正する法律.txt
C言語辞典が char filename[256]; とよく書いてるね つか256が基本だろ
なわけない
前にも書いたことがあるが char filename[40]; とか言う半端な数字使ってるソース MS-DOS時代ならそれでもよかったんだろうけどさあ('A`) Windows版なんだからMAX_PATH使おうよぅ('A`)
MAX_PATHでもUNCパス使い出すと足りないんだよな……
1クラス20000ステップ越え(T△T)
どのくらいのコード量のことを1ステップというのかいまだに知らない俺様
スタートレックのクワッドと同じで常に現在の常識より大きい量のこと
>>304 コメントを除いたプログラムの行数という意味で書いた。
ステップの正確の意味は違うのかも知れん。
デバッグとかで一行進むのに「次のステップ」とか言うのが元になってるんじゃないの? 知らないけど
例としてよいか分からんが、 while ((c = getchar()) != EOF) { } は1ステップ?
javaなら概ねセミコロンの数でいいんじゃね?
行数−空行−コメント行 でOK
main(){int i=0;for(;++i<101;){if(i%3&&i%5)printf("%d",i);printf(i%3?"":"Fizz");printf(i%5?"":"Buzz");puts("");}} これで1ステップか。
オレいっぱい書いたよ、すげぇだろ!的な指数になってて アホな職場では評価に影響するが当然厳密には数えないので 本来の意味よりは行数重視になってる
>>312 残念ながら俺が書いた。
適当に縮めただけだからもっと短くなるだろうな。
ステップという言葉はアセンブラ時代の名残りなのだよ。 行主体の言語を経て、文主体の言語が主流になった現在においても、 この言葉が残っていること自体が驚きだ。
「考える時間」は余りに流動的だから敢えて切り捨てるとすると PGの「生産」とは畢竟、打鍵なわけで その観点では生産性をステップ数、ないしlocで計ることは間違っていない あ、そもそも「その観点」が間違ってるってのは承知で書いてるんで突っ込みカンベソw
>>311 main(){int i=0;for(;++i<101;){if(i%3&&i%5)printf("%d%s%s\n",i,i%3?"":"Fizz",i%5?"":"Buzz");}}
ちょっと短くしてみた。
どれだけ関数呼び出したかで考えればいいよ (+ 3 (* 4 3)) これで2ステップ
ラムダ式で書けばどんな処理も1ステップとしてカウントされるんだな ブロックの階層も浅くなっていいことづくめだね☆
325 :
仕様書無しさん :2007/11/20(火) 12:56:53
public String complementDate(String mmdd) { // return "2005" + mmdd; // return "2006" + mmdd; return "2007" + mmdd; }
ま、まあ、シンプルでいいんじゃない?
毎年改造が発生するのか・・・・
( ;´A`)
除夜の鐘を聞きながら改造しないとな。
この変更作業でちゃんと毎年お金貰えてるなら 素晴らしいコードだ。
いいなー
で、今年の大晦日に return "20008" + mmdd; とかやらかすわけだ。w
>>325 これは激速!
こんな方法があったとは気づかなかった!
思わずもっと速くしてみたくなる。
public String complementDate(String dd) {
// ・・・・・
// ・・・・・
// return "200709" + dd;
// return "200710" + dd;
return "200711" + dd;
}
う〜ん。
まだ速くできる余地が残っていそうだな・・・
>>333 ほれ
public String complementDate() {
// ・・・・・
// ・・・・・
// return "20071119";
// return "20071120";
return "20071121";
}
もう飽きた
アホコードが実際にあるわけないと思いつつ ろくでもない仕様書をもとに苦労しても どうせ他人のものになるのなら という感情が理解できないわけでもない
ちゃんと動くならいいじゃない
アホな客がこれの更新で金出してるならいい儲けだな
毎年仕様書も更新してたりとか
予算消化的な意味でなら有り得なくはない…
変更履歴 05.12.31 complementDate()の返却値を2006年に変更 06.12.31 complementDate()の返却値を2007年に変更 07.12.31 complementDate()の返却値を2008年に変更 w
メンテナンスが楽でいいねw
大晦日に必ず変更かけるとかやだぷー
一方某社はiniファイルを使った
大晦日に変更かけるようにスクリプト組んどけばいいのに
もちろん、 マは大晦日(だけ)に変更をかけるスクリプトを組む。 現場は大晦日は休み。 だよな。
ソースコードを書き換えただけで完了なのか?
>>325 こうくると、うるう年の判定処理なんかも怪しいな。
とりあえずは334の方法に修正して運用方法を変更すれば完璧に対処できるけど。
>>348 たぶんJavaServletだから、Makeとサーバ再起動が必要そう。
まずは対象ソース更新用の専用アプリを作り、
ソース更新アプリ起動→再コンパイル→DBストップ→サーバ再起動→DBスタート
というシェルを組んで、Cloneを使って12/31 23:59:00に起動するようにすれば良いんでないの?
まあソースを直した方が手っ取り早いという意見もあろうが、敢えてこの険しい道に挑戦してみるのも、
趣向としては面白そう。
Cloneってなんだ?
>351 それはcron
353 :
350 :2007/11/21(水) 11:29:55
>>352 だよね。なんか別の何かかと思ってしまったw
354 :
349 :2007/11/21(水) 11:30:43
そう。 cronをcloneと打ち間違えた。
355 :
349 :2007/11/21(水) 11:40:01
ついでに、 12/31 23:59:00 ソース更新アプリ起動→コンパイル 01/01 00:00:00 サーバ停止→DB再起動→サーバスタート と二段階に分けた方がいいな。 まあどうでもいいや。
こんなどうでもいいことに熱くなれるおまえらがウラヤマシス
しかしこれはたぶん設計の問題なわけで、
>>325 の動作が
仕様ならああ書くより他に手がないと思うけど・・・
つまりコードは悪くない
>>358 仕様書に「2005を頭につけて戻す」って書いてあったとしてだよ、
ちょっと疑問に思って、「すんません、これって現在日付の年を
補完するってことじゃないんですか?」って仕様書書いた奴に
聞きに行くのが、素直に育った人間のやることなんじゃないっすかね。
仕様書にそう書いてあったら他に手が無いって、すげーな。
まあそう怒るなよ
怒ってなんかいないよ? ただ既に決定している仕様をひっくり返して手戻りで無駄に工数増やしちゃうようなのは不要だってだけだよ?
工数増えるような設計してるから、自業自得なのでは?
責任転嫁もコミュニケーションのうち
足の引っ張りあい集団?
>>362 えー!とことんすげーわ。
世界が違う。そこまで徹底されるともう、感服です。
まさに「この会社辞めようと思ったソースコード」に
ふさわしい。
「この会社辞めようと思ったソースコード」というより、 「この会社辞めようと思った仕様書」なのでは? 読み違えてる?w
ソウフトウェアというものは 設計・コーディング・テストの最低ラインをなぞったものの集合体
>>367 もっといったらこの場合、
「辞めようと思った管理者の言動」だよな。
ちょっと疑問に思ったくらいで仕様書書き直してたら終わるものも終わらない 一人でやってるならともかく
こういう場合、黙って気を利かせて現在年を返すようにしとくのが正解か? もし後から指摘されたら仕様を読み間違えたと謝っとく。
仕様書の欠陥の可能性があるから報告するのが正解じゃね?
余計なことすんなよ せっかく一年おきに確実に保守費用が発生するように作ってあるんだからさ
>>370 確かにそれは正論だけど一般論なわけで、
この場合、修正箇所が無茶苦茶小さくて
しかもその後の作業負荷軽減に
大きく貢献できる修正を提案して
何が悪いんだかさっぱりわからん。
つか、この場合仕様書修正しなきゃやばいだろ、
残しとくだけでも恥ずかしいわい。
まあ
>>373 がネタとしての落としどころだったよな。
最終改修年を返す仕様なのかもしれんぞ
毎年ウチに保守させれば動くが他の業者に変えたら 知らんぞ、ということかも!
ここにあるクソコードが生み出される 原因のひとつを見た気がする
人は食わねば生きられない 存在自体が罪なのさ
>>371 それはダメだろ。ちゃんと確認しなきゃ。
2007年1月4日に出社してきたお客さんが「さーて年末のデータをバッチで処理するかな」と
2006年用PGで処理したら、なぜか2007年のデータとして処理されました、
原因はPGの仕様取り違えによる、2006年に実施したテストでは発見されないバグでした、
てなことになる。
どこまでがネタかわかんね
コードから仕様は推測できないという有難いお話だろ
仕様は推測できるが仕様が意図されたものかわからないという話
c++で見たコード char test[10] = "\0"; さて、どこから突っ込もうか……
アッー!
初期値に空stringってのはよくやると思うが、どこがいけないの?
C++なのに文字列にcharを使ってるといいたいのでは?
つか NULL 使おうよ・・・
>>387 どういう意味だか分からないんだガッ
説明をしてくれないか?
初期化に文字列リテラルを使うのが間違い (だと俺は考える
いやきっと、"\0"じゃなくて""で十分だということでは?
そういうことだろ
char test[10] = {'¥0'}; こうですか、わ(ry
きっと正しくはこうなんだよ char test[10] = "\\\0";
素で間違えた char test[10] = "\\0";
char test[10] = NULL; これでいいじゃn
ここで皆さんに残念なお知らせがある この中に、マでない者がいる
ざわ・・・ざわ・・・
testなんぞという変数名が問題だ、と受け取ったねオレは
きっとこうだ! char test[10]="\0\0\0\0\0\0\0\0\0\0";
フフフフフフフフフフ
プログラマはじめたばっかちのころって こんなことで楽しかったんあよね・・・・、あのころは楽しかったなぁ
フフフフフに楽しい思い出なんかないなw
ベーマガの投稿プログラムをひたすら打ち込んでいた頃に戻りたい
ドッフルギャンガフフフフフフフフ
ポケコンでゲーム作ってた頃が懐かしい。。。
プロシージャとかローカル変数の概念がないBASICで 変数表作って小さなプログラム書いてたころが懐かしい。。。 板違いすんまそ。
チラシの裏にメモリマップ書いたり ハンドアセンブルした紙をホッチキスで まとめていたころが懐かしい・・・
>>404 ああ、それはそういうことだったのかと、今になってようやっと気づいた。
βの頃は楽しかったなぁ。
private sub main try catch ex as exception call log_write end try end sub private sub log_write try 'ログを書き込む処理で落ちるw catch ex as exception throw ex end try end sub
>>409 エラーがあったことを教えてくれるんだから見逃してやれ
むしろ印象コメント系だな
他部署からリファクタリング部隊が来てるのだが、、、 無駄な処理入れたりで複雑化させてくれやがるぜ・・・。 スタックで済む局所部でnewとかvector使うとか。 意味無く計算順序を入れ替えたりとか。 あげくに枯れてるコードに、メモリ関連で手を入れるとか。 あああ誰かなんか言ってくれよおおお。 せめてレビューしろよ!!
誰の言葉だったかなぁ 「アジャイルだのリファクタリングだのはそれなりにできる人間にだけ許されることで そこらのヘタクソがサルマネすれば破綻するだけ」 ……まぁ、新人をそういうチームへ放り込んで鍛えるってのはありと思うので 一概には言えんがおおむね同意 俺? もちろん「リファクタリング」しちゃいけない側orz
>>412 「自分らの好みで人のコードを勝手にいじり隊」と命名します
つーかリファクタリング部隊なんてのが存在するんだ...
リファクタリング部隊がいるならテスト部隊もちゃんといるのかな? ってか、外部から来てリファクタリングって相当の技術と読解力が求められそう・・・
テストもなしでリファクタリングなんてあり得ないでしょ
そういうのは何のためにやるの? リーダビリティ? 性能? あと・・・何だろう?
>>418 リファクタリング部隊とやらに放り込まれた連中の稼働率うpの為。
↑ どうしようもねー
リファクタリングっていってみたいだけ
救済が目的なんじゃなくてとどめをさすのが目的なのかも
>>418 おれのとこにいたリファクタリング厨は
言ってみればオナニストだった
自分しかわからない様に作り替え、継続してメンテの仕事を得る。 ってところか。タブン。
こないだ見たソースコードは凄かった…… C++なのに、引数が全部値渡しでわたってる。おまけにコピーコンストラクタの記述はなし……
ポインタの概念を知らないでポインタ渡しするよりはマシだろう。 猿に教えるほうがまだ簡単ってレベルの奴がいるから恐ろしい…。
>>425 ,
>>426 おれの今の現場のソースも似たようなもん。(Cだけど)
それ以外は全部グローバル変数。
そんでもって返り血がポインタなんだけど、ローカル配列ので関数から戻った先でバグル。
「共通関数」と称して互いに関連性もない関数群がひとつのソースに詰め込まれているし、、、
ヘッダには変数の「定義」書きまくり。errnoなんか勝手に定義しちゃってる。
せめてextern, static, const位は知って欲しい...
俺が過去に経験した+αのすべての糞コードを全て集約したような感じだ。
猿どころかミジンコの方がましなくらいだ!
猿レベルの俺が言うんだから間違いない.
そういうところでグローバル変数禁止とすると、すべてのグローバル変数を 構造体メンバに纏めてその構造体を関数間でずっと連れ回すようになる。
┼" _|,-、 ー," 土 ー," キ -, ノ こ ノ| し ( し ( ヽ o) ケ ケ ぃ ノ | ー--、,, ヽ、_ |ヨ E| 田 ┼ 、 | , / ー," 十 | 日 | 十 ノよ ヽ_/ ヽ__ (__ ( ゚)
>>428 それやられたら、次の日には会社に行かなくなるな……
VBの場合だと Variant配列にVariant配列が入ってたりする
VB(VBA)といえば、スマン最近まで implements や WithEvents の使い方を知らなかったのは私です。 クラスあまり自体使ってなかったけど... むかし、Object型で無理やり作っちゃったころImplements知ってれば...
.NETnisiro
>>432 高尚な悩みだな……
さっき出くわしたソースにはこんなのが。
Private Function hoge() As String
....
hoge = True
End Function
これでコンパイル通るから困るw
>>434 あめー、VC++6.0、MFCでこんなの見たぜ
CString CHoge::Func()
{
// 色々
return -1;
}
これでコンパイルが通るんだから凄い。あ、VCのバージョン違うと通らんよ。
流石VB。と思ったらVCでもあるのかよ!!>435
>>434 つまり、暗黙の型変換が駄目だということか?
それならVB辞めるしかないな。
このレベルのソースがゴロゴロ世の中には転がってるから困る。
439 :
432 :2007/12/10(月) 20:04:12
俺の変な日本語にだれも突っ込まない。 皆優しいな。
>>439 一応内容が一意に読み取れるし、2chで変な日本語というにはまだ甘いと思うぞw
VBのTrue って 整数の-1 になるからって、掛け算にして符号反転に使用している。 というケースを見た。これってどうなん?
VBは知らんけど、それって可読性で問題でないのか? いや、質問を質問で返して申し訳ないんだが……
>整数の-1 これ知らないとワケワカメなコードになるな
アセンブラの世界だな('A`)
関係式って学校で習わなかったか? BASICで(A=B)が真なら-1偽なら0と評価される 昔から当たり前に使われているコード量節約の基本
処理系によって真の値は違ってたはずだが 自分が知ってるのは真なら0以外ということだな どっちにしろ仮の引き算をしてゼロフラグが 立つか立たないかというレベルの話だったはず
>>445 昔から使われてるってのは、あまり良くない言葉だよな。
場合によっては全く逆になる恐れがある。
コード量節約してどうするの?
てか、BASICでそれやって節約した時代じゃないんだから習わなかったか? とかいっちゃだめ。 Cなら関係式は0か1になる処理系が多いけどこれも絶対じゃないし、 あんまり使わなくなったテクニックで邪悪だからやめておけよと
449 :
441 :2007/12/10(月) 22:28:31
>>442 うん、俺もそう思って書いた。
>>445 BASICは習ってないけど、おれも
>>446 と同じように理解していた。
>>441 がコード量節約が目的かどうか分からんけど、符号反転なら単項-でいいよな。
その方が「符号反転」を強調できる。
確か下の様な感じのコードだった。0掛けちゃマズいからIf文の中にある。
If x <> False Then 'この時点で x はBooleanから変換したIntegerだったかも??
a = b * x
End If
書きながら思い出したけど、上記のように <> False も目についた覚えがある。
可読性だけが取り得のBasicで、コード量減らしてメンテ性激減なんて馬鹿過ぎる
>>448 Cの比較演算子は0か1になることが仕様で決まっている。
Cは決まってるからいいけど、VBの場合はMSが文書化してるのかな。
The result of the logical negation operator ! is 0 if the value of its operand
compares unequal to 0, 1 if the value of its operand compares equal to 0.
Each of the operators<(less than), >(greater than), <=(less than or equal to),
and >= (greater than or equal to) shall yield 1 if the specified relation is true
and 0 if it is false.
The ==(equal to) and !=(not equal to) operators are analogous to the
relational operators except for their lower precedence.91) Each of the
operators yields 1 if the specified relation is true and 0 if it is false.
The && operator shall yield 1 if both of its operands compare unequal to 0;
otherwise, it yields 0.
The || operator shall yield 1 if either of its operands compare unequal to 0;
otherwise, it yields 0.
以上ISO/IEC 9899:TC2 [
http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1124.pdf] ドラフトじゃない仕様は有料?
Cから入った奴は0or1でわかると思うけど Javaから入った奴は???てなるな
つか、どこから入ろうと、その言語書く前に言語仕様ぐらい調べないか?
にしたって隙間すぎると思う
0とか1とか-1とか0以外とか、言語によって紛らわしいから Boolean型を使うように統一してほしい
思い出したがBASICって、 変数名長くしたり、スペースでブロック見やすくすると 速度激減だったな。
>>456 それ言い始めたら……言語による差異が……
それぞれの言語にそれなりのポリシーがあって個別の仕様にしてる訳だからね
まーあれだ。メインメモリが32KBしかない(しかもフルに使えるわけじゃない)環境で BASIC走らせてると思いねぇ。 1バイトだって短くしたくなろうってもんさ…… つまりそんなオサーン、つかジサーンの時代のテクニックってことだ > Trueを-1扱い
DEFINT A-Zとか懐かしい脳。
>461 知ってるか……? VB6の時代にはまだあったんだぜ…… > DEFINT
mjk!
そういやWindowsプログラミングとかやるとBooleanが返るとか言いながら1,0,-1の3値だったりするなぁ。
GetMessageだな。正直罠か嫌がらせだと思ったよ。
>>449 だとifが邪魔だから
a = b * (x * 2 + 1)
って書いたほうがよくない?
ますます今時やらないか。
だってtypedef INT BOOLなんですもの
BOOL = INT = int だから、C 言語的には返せるけど、 「やってはいけない」ことの例だよな プロトタイプ宣言を INT WINAPI GetMessage(...) に してくれるだけでだいぶ違うんだけどなぁ
>>468 んな事言い出したら、うちの会社のソースがほとんど読めなくなる
>>469 のように言い出されるから変えたくても変えられなくなってしまったということだな。
最初にしっかり設計しなかったツケ。
誰が払わされてるかというと、まぁ、その、呑むかね。
typedef INT TRIBOOL
今日発見。elseが無いよ。 if(x==A) { strcpy(str, "AAA〜"); } { strcpy(str, "BBB〜"); } しかも、コイツはやたらと strcpy, strcat を使いたがる。 上記のstrcpyも実は不要だった...
>>472 スコープを作るためのブロックってのなら普通に使うけど、
そのコードはどうみても「else忘れました」だな。
else を括弧の横に書くか改行するかで揉めたなぁ。。。。
間に挟まる行数によっても見栄えが変わってくるから、 あんまりきっちり決めたくないな。
strcpyを良く使うって言えば、こんなソースがあったな int len = ???;//数字直打ち、ここだけ英語の頭 TCHAR* mojiretu = new char[len]; //ローマ字,TCHAR,charの混合 stcpy(mojiretu, "○○");//文字列直打ち、strcpy kansuu(mojiretu);//ローマ字 delete mojiretu;//delete使用。 //kansuuの中身。 TCHAR* kansuu(LPCTSTR nyuuryoku)//ローマ字、LPCTSTR使用。 { int len = strlen(nyuuryoku); TCHAR* mojiretu = new char[len + 1]; strcpy(mojiretu, nyuuryoku); //以下処理。ちなみに、nyuuryokuをそのまま使っても全く問題なし。 return mojiretu; //何に使うか不明。どこでも使用していない。というか、戻り値受けてる場所さえ見つからない。 }
>>476 俺だったら3行目の時点でそいつ殴ってる。
1行目は我慢できなくもないが 2行目でアウトだろ 常考
LPCTSTR LPC???????????????????????????????? 意味わかって使ってんの?w
>>480 いやその「LPC」の3文字は、
数少ない適切な部分だと思うがw
さて、皆に聞きたいんだがこのレベル(
>>476 )のプログラマーがプロジェクトに来たとき、
お前らならどうする?
簀巻き
粽
プログラマー経験2年目までならコードレビューをやってあげる。
■俺の書いたコード unsigned int i; for( i=0 ; i<100 ; i++) { if ( checkStatus() == TRUE ) break; sleep( 100 ); } if ( i == 100 ) return ERROR; ■レビュー後のコード unsigned int i = 0; unsigend int good_status = FALSE; for( i=0 ; i<100 ; i++) { if ( checkStatus() == TRUE ) { good_status = TRUE; break; } sleep( 100 ); } if ( good_status != TRUE ) { return ERROR; } 納得いかんが・・・これが仕事(共同作業)というものか。w
理由もなしに、そう書き換えられたの?
==TRUEでどっちも駄目だ
>>488 ちゅーかレビューってのは理由なしに、いきなり書き換えるものなのか?
>>489 レビューした人が、for文抜けた後の iの値がどうなるか
よく判らなかったので。
>>490 TRUE/FALSE以外の値が入る余地があるなら、!= FALSEも
考えるけど、そうじゃないなら読みづらくなりそうで、あんまり
好きじゃないな。コーディング規約的にありそうだとは思うけれど。
>>492 お互いに意見を出し合ったりはしなかったのか?
iの値なんて、お前さんが説明すれば良いじゃないか。
>>493 説明はしたけど通らなかった。笑
レビューした人はお客さんだから、まあ、お客さんが
そういうのであれば・・ってところですよ。
>>492 知らない人が見たら、余地があるかどうかはcheckStatus()の仕様やソースを確認しないとわからないじゃない
だから統一して!= FALSEにしたほうがいいんじゃね?ってのが理由かな
以下、ブール比較の議論が数十レスにわたって始まりませんように
そういう事情なら仕方ないか……
>>494 馬鹿な客相手にご苦労なことです
何かと不条理なことは多々あると思いますがこれからも頑張ってください
まぁ、百歩ゆずって解釈すると、分かりやすくなったって事かな?
>>494 の顧客みたいな人間でも、レビュー後のソースなら分かるって事で、
可読性重視なら、これも…………
レビュー前のソースがわからないと言うのは 可読性云々よりも知能の問題のような気がするが
俺はどっちかというとレビュー後のコードの方がいいと思う 理由は元のコードだと修正が入ってリトライの回数が変わったときに 2カ所変更が必要になるから if ( i == 100 ) 部分の変更をし忘れるとバグ出しちゃうし
>>500 それは突っ込み待ちか? 下じゃあかんの?
■俺の書いたコード
unsigned int i;
for( i=0 ; i<100 ; i++) {
if ( checkStatus() == TRUE ) break;
sleep( 100 );
}
if ( i == 100 ) return ERROR;
■レビュー後のコード
unsigned int i;
const unsigned int count = 100;
for( i=0 ; i<count ; i++) {
if ( checkStatus() == TRUE ) break;
sleep( 100 );
}
if ( i == count ) return ERROR;
int checkAndRetry(int count) { int i; for( i=0 ; i<count ; i++) { if (checkStatus()) return TRUE; sleep( 100 ); } return FALSE; } if (!checkAndRetry(100)) return ERROR;
>>501 iが全く別の意味を持って使いまわされてるのはなんか違和感ある
>>502 checkStatusがtrueのときreturn trueするとは書かかれてない
unsigned int i;
for( i=0 ; i<100 ; i++) {
if (checkStatus()) break;
sleep( 100 );
}
if (!checkStatus()) return ERROR;
checkStatusを2回実行しても同じ結果が返るとは限らないな
>>503 >>502 はループ部分を関数化し、good_stuaus相当を返却するものだろ。
if (!checkAndRetry(100)) return ERROR; でTRUEが返れば継続されるじゃん。
つーか、unsignedには誰も突っ込まないのか?
>>501 100が変わりうるのであればdefineかconstを使うべきやね。
「レビュー後のコード」の方が保守性が高いという
>>500 の
意見は一理あるとは思うが、どうも無駄な変数が増えるのが
気に入らない。
for(int i=0; i<100 ; i++)
とするなら good_statusを使うのも良いかも知れんが、
標準的なCではないな。
Pro*Cのソースで全テーブル削除の処理で、 EXEC SQL WHENEVER SQLERROR DO GOTO :sqlerr; int count = 0; EXEC SQL TRUNCATE TABLE TABLE1; count++; EXEC SQL TRUNCATE TABLE TABLE2 count++; : EXEC SQL TRUNCATE TABLE TABLEN; count++; return OK; sqlerr: switch(count) { case 0: printf("ERROR TABLE1"); break; case 1: printf("ERROR TABLE2"); break; : case N-1: printf("ERROR TABLEN"); break; }
>>507 この場合が適切かどうかは別としても
保守性が上がるのならそれは「無駄」じゃないと思うよ
unsigned int i=100; while( checkStatus() != TRUE ) { if (--i == 0) return ERROR; sleep( 100 ); }
>>510 見づらい
unsigned int i=100;
while( checkStatus() != TRUE )
{
i = i - 1;
if (i == 0)
{
return ERROR;
}
sleep( 100 );
}
俺個人的にインクリメント、デクリメントはあまり使いたくないね
インデントなしのほうが見づらいけどね
ソースはともかく2chの書き込みでインデントを気にしたらダメだろw
i--; をわざわざ i = i - 1; って書いたコードみたことねぇw
見やすさについて語るなら 2chであれ読む側への配慮ぐらいすべきじゃね
2chでのインデントは全角スペースで
インデント無しも全角も勘弁してくれ。 しかもム・マ板なら尚更だ。
てーかデクリメントは単独で使ってくれ。 --i=k++; みたいなコードは論外だ!
==だった。
>>517 だって半角スペースもタブも詰まっちゃうよ?
を使いなさい
>>514 万人受けする見易さは圧倒的にi = i - 1;だけどな
H8/532シリーズ用のコンパイラで、i=i-1;だとレジスタにロード,デクリメント,ストア i--;だとメモリをデクリメントするコードを吐く奴に出会ったことがある。
単独デクリメントすら読みにくいってVBerか
>>522 いくらなんでも、ここでいう万人はC言語知ってる万人だと思ったんだが……
インクリメント・デクリメントぐらいの砂糖はかけさせてくれよ……
Cとか、文法似た言語は、普通インクリメント、デクリメントじゃないの? i = i - 1とか、見たことねぇ。
そこで「釣りですよ」発言だ!
>>527 でもやってる事は同じだから好みの問題じゃない?
i--;でもi = i - 1;でもバグるわけじゃないんだから
「好みの問題」はさておき 「万人受けする」とか大嘘言ってるヤツへの反論でそ
i-1は絶対fortran時代の残党だろ
まるで宗教戦争w
物書きでも読めない漢字にふり仮名打ったり表現をより簡単なものに差し替えたりするだろ? 自分のために書くならともかく他人のために書くなら内容の知的水準を他人に合わせることに何の疑問がある? 不満があるなら馬鹿相手に商売してる自分を呪うんだな
まったくだな。 個人でやる分にはいくら見難いコードでも何でも使えばいいと思う ただ、仕事として後の保守を考えて水準を他人に合わせてあげた方が いいだろうからトリッキーな記述より冗長な記述の方がよかったりする。 後ここのスレにはいないと思うけどコメント書かない屑は死ねwwwwww
アルゴリズム単位ならともかく1ビット2ビットケチるのはマというよりハッカーのレベルだな 仕事で書くときは面倒でも可読性あげた方が後々面倒少ないし
>>535 それはハッカーではなく、バッカーではないのか。
バッカーwwwwwwwwwwwww
インクリメント・デクリメントが可読性低いとかいうヤツと仕事したくねぇよ
まったくだな。 インクリメントごときワカランヤツに後々のメンテが出来るとも思えんし。
とはいえ、式の中でインクリメントを前置・後置で使い分けたり、 3項演算子と組み合わせたり、果てはそれをネストさせたり、 スワップにxor使うような人のコードは読みたくないな。
スワップにxorを使うのは頭の進歩が止まってて情報収集能力もないアホだからな。
いんくりめんとがよみにくいとしゅちょうするのは、 ぜんぶひらがなでかけ、としゅちょうするくらいまぬけにみえます。
何このインクリメント闘争wwwwwwwwwwwwww
そういえば VB で見たコード Dim i as Integer for i = 1 to 4 Select Case i Case 1: 1の時の処理... Case 2: 2の時の処理... (中略) End Select next 各処理でも使っていない、i が何の為にあるのか分からなかった。
>>543 漢字を廃して全部ハングルにした国が隣に実在する事実を忘れてはいけない
隣は隣
>>545 言語を問わず、よく見かけるな。誰が書いたか分かったら、一時間ぐらい説教したいぐらいむかつくコードだ
しかしforループの中にswitch/case文入れて各処理を1回ずつ行うって… どっから広まったんだ? 普通にプログラムの勉強したなら、そんな処理はあんまり思いつかないと思うんだが。
こういうのってプログラムの勉強が足りない馬鹿でしょ なにかと形で覚えてるだけで中身を理解してない証拠
とりあえず、これを書く奴がいたら、馬鹿認定は楽に出来るからいい。
signal(WM_QUIT, handler); キャッチできると思ったんだろうか… ちなみにVS2005以降では実行時エラーになる。 他に生成したスレッドの管理放棄、メモリ・リソースリークおかまいなしorz 変なソース押し付けられてしまったわ。
//エラー処理1 if( エラー条件1 ) { //あとで } //エラー処理2 if( エラー条件2 ) { //あとで } //エラー処理3 if( エラー条件3 ) { //あとで } このコードを書いた人はすでにやめている。
>>550 俺もそう思うんだが VB.NET と Java の全く無関係なプロジェクトで1回づつそういうコードを見ている orz
だから何かどっかにネタ元があるんじゃないかと睨んでいるんだが...
よくわからんが起源はステップ実行関数だったのかな 関数が呼ばれるたびに順次処理を一部ずつこなしていくようなやつ そこからstaticだか引数だかで持ってたカウンタの意味が失われたのが件のfor&caseじゃない?
例えば順次処理をするんだけど1の段階でエラーが出たら以降の処理も行わないってときに 使うんじゃなかったかな。gotoを使わず(例外処理は無い)、returnするでもなく、 「見やすく」実装できるとか。むかーし、そんなことを得意げに説明された記憶がかすかにある。
それだったらgotoのほうがいいなw
>>557 関数って知ってる? と言いたくなった。
間違ってたらゴメン。
>>559 >>557 じゃないけどたぶん、「returnするでもなく」って部分が「関数化するでもなく」って事なんだと思った。
あと、どっかでは「各関数にreturnは一つだけにすること」なんてコーディング規約があるという噂も・・・
>>560 すまん、そこを読み違えていた。
しかし、returnの何が気に入らないんだろうね。561も含めて奇異に聞こえるよ。
途中returnは「このケースではここから先は見なくていい」という 合図だから考えることが減ってよいと思うんだけどね。 「returnは最後に1つ」という規約を決める人は、途中で抜けるって のにものすごく恐怖感を持ってしまうのか、単に理解できなくなるだ けなのか。
こんなのあった strHoge = Str(Right(Left(strFuga,4),2))
>>563 確かにそうなんだが、昔returnの後に、延々2000行ぐらいコーディングしてるのを見た事があってだな……
returnが最後に1つは、構造化原理主義だろ。
「入り口と出口は共に一つずつ」だっけ?
568 :
仕様書無しさん :2007/12/17(月) 23:41:09
フローチャート(笑)の出口に向かう線が増えるのが嫌なんだろう
きょうびフローチャートまじめに書いてたら仕事が3倍以上になるんだが・・・・
method(arg){ if(arg.length == 0) return; // sex }
フツーの関数だと、入力値のチェックが入って、エラーなら処理を中断するってのが多いよな。 そういうのを実装すると、 if (エラー条件1) { return -1; } if (エラー条件2) { return -2; } if (エラー条件3) { return -3; } 本来の処理 ってなると思うんだが。 こんなのをreturnは一箇所とか、変なルールで縛られると、条件がネストして発狂したくなる。
int func(int hoge) { if (hoge > 0) { return -1; } 〜中略〜 return 0; }
出口複数OKでも、論理を反転させることを知らない奴が書いた こういうコードを見るとウボワァーってなる。 if (正常条件1) { if (正常条件2) { if (正常条件3) { 本来の処理 } else { return -3; } return -2; } } else { return -1; }
何カ所も同様のコードがあると死ねるな。
つか せめてリターン値を変数に格納しようや・・・・
変数に格納しなければならない理由を教えてくれ
変数に格納しとけば最後の1行だけのリターンにできるから、アホなコーディング規約にも合う。
変数に格納するってこういうこと? で、gotoも使わない? ますますわかりにく…w if (正常条件1) { if (正常条件2) { if (正常条件3) { 本来の処理 } else { rc = -3; } } else { rc = -2; } } else { rc = -1; } return rc;
>>579 そりゃ、元からのコードの書き方が悪いせいで読み難くなってるんだと思うけどなぁ。
なんで実値を代入するんだろう?
rc = SUCCESS
rc = ERROR_WRONG_ID
みたいに参照しない?
同じエラーコードを使いまわしたり、仕様変更に対処できるようにしたいから、こうやってる。
そういうレベルの問題じゃないと思う
「論点」って、議論してるつもりだったんだw
関数ポインタ使ったら「みんなの読めないコードばかり書くな」って上司に首になった人のこと思い出した。
「関数ポインタを使うとクビになる」 (lll゚Д゚)ヒィィィィ
>>561 とあるソフトのマクロだけど、言語仕様がそうなってた。
return を、関数の最後以外の場所に書くと、文法エラーでコンパイル通らない。
void 型の関数だと、return を1個でも書いたらエラー(関数の最後で抜けるだけ)。
ソース見て確認する人のレベルに合わせないと 確認のOKが出ないから仕方ないのかも・・・って それこそ論点ちがうか
プログラマーも運転免許程度の国家資格にすればいいのに。 そうすれば、あまりに低レベルな奴は除外できる。 バグによる国家損失も少しは減るだろう。
C++ 二種とかw
返り値を受け取れ int xx_status = xx_OK; if(xx_func() == xx_NG){ ←ここの関数はxx_OK/xx_NGしか返さない xx_status = xx_NG; } 不要なネスト if(ww_status != ww_OK){ if(ww_status == ww_NODATA){ break; /* whileから抜ける */ } return(NG); } しつこい条件 if(zz_status == zz_OK){ (処理) }else if(zz_status != zz_OK && zz_status != zz_ERR1){ (処理) }else if(zz_status == zz_ERR1){ (処理) }
不要なネスト if(ww_status != ww_OK){ if(ww_status == ww_NODATA){ break; /* whileから抜ける */ } return(NG); } これはいいいんじゃないの別に? 殆どの場合 ww_OK なんでそ?
if(ww_status == ww_NODATA) break; if(ww_status != ww_OK) return NG;
俺はほとんどの場合 ww_OK が期待できるなら、 「不要なネスト」とされている方のコードしか書かないな。 たかだか一度しか実行されない ww_NODATA の場合の処理が僅かに非効率になる方が、 ループ中ずっと実行される ww_OK の場合の処理を非効率にするよりも好ましい(と思う)から。
594 :
590 :2007/12/18(火) 22:00:28
おぉ。言われてみればそうだな。 そういえば俺も以前、テクニックとしてのそういう書き方は本で読んだりしたことあったよ。 まあでも、このソースの他の部分みたら、そういう意図があったとはとても思えないんだけどね。
多重ネストはVB6でよくお目にかかる。これはしょーがない。
>>589 いや、俺はマジで必要だと思うよ。
「とりあえず○○言語のプログラミングはできます」的な奴が氾濫してる
おかげでどれだけ世の中にバグがあふれている事か。
例外もしっかりキャッチしてハングする事もなく、処理速度も速くて読みやすく、
再利用性が高くメンテしやすい。(矛盾するところもあるけど)
こういう事を考えた上でそれに沿ったプログラミングをするのは
もはや職人だ。当然それなりのスキルのある人間にはそれなりの報酬を与えるべき。
プログラムもろくに組めねー糞SEにゃ設計は無理。
プログラマーがただのコーディング要因としてここまで冷遇されているのって
日本くらいじゃね?
ちゃんとしたプログラミングの試験てむずくね? 筆記穴埋め問題みたいなのはあまり意味ないし、 暗記すれば解けるようなのも意味ない ユニークな良問を考えなければならない
FizzBuzzが解ければいいよ
↑BASIC カス|C言語(ポインタ含まない) |C言語 |C++(クラス・継承含まない) プロ|C++(継承含まない) ↓C++ こんな感じ?
ポインタ含まないC言語なんてBASICよりやばくね?
>>600 組み込みでたまにあるらしいぞ…
グローバルのみらしい…
たとえC++のクラスや継承を使っていても、 酷いコードを書く人間は大勢いる。 謎の継承。不可解な変数の上書き。不要なオーバーライド。呼ばれたらエラーを返すだけのオーバーロード(これは微妙にありかも)。 そもそもプログラマ認定資格試験なんてあっても、結局基本情報とおなじ結果になるだけでしょ。 余計悪いかな。受験料7万円とかになったりしてね。
>>599 C++プログラマでまともにオブジェクト指向を理解してる奴ってほとんど見ないんだが。
>599 委譲が理解できたらプロを超えるんだろうか
自分的にはクラス周りを覚えると効率の良いコードを考え易くなるから〜とおもったけど、 書き方の醜さとかは考えてなかったなぁ・・・ やっぱカスはカス以外には成れないのが世の中か
C++プログラマはポインタ理解して無い奴が多い
>>597 筆記でなくとも、プログラミングコンテストで使われるような
自動コンパイル&出力チェックシステムで良いんじゃないか?
プログラマーの技術なんて全てコードに現れるもんだからな。 実行時間と、メモリ使用量をある程度制限して、問題を課せば試験としては成り立つだろう。 連投スマン
「javaプログラマがポインタを知らなくたって大丈夫さ.言語仕様に無いんだからな. ちゃんとスタックとヒープの違い.メモリ上の文字列の扱い.参照とオブジェクトの違いを把握して, 継承とインターフェイスとオーバーロードを便利に使いこなして, スレッドやタイマーをデッドロックを起こさず、無駄に複雑な技巧に走らず, すっきりした見通しの良いコードを書くプログラマなら,ポインタなんか知らなくたって構わないさ. C++のプログラマだってそうだろう.」 問題はC++でポインタはかなり中心的な機能だってことくらいで・・・
そんなことより日本語がおかしいのが問題。
学校教育の問題か?
612 :
仕様書無しさん :2007/12/19(水) 02:43:34
void Hoge(int n) { switch(n) { case 1: Fuga(1); break; case 2: Fuga(2); break; case 3: Fuga(3); break; case 4: Fuga(4); break; } }
たまに、 case 6: Fuga(7); break; とか出てくるから、始末が悪い。 そういう仕様なのか単なるバグなのか、コードだけじゃ判断できん。
それなら void Hoge(int n) { switch(n) { case 6: Fuga(7); break; default: Fuga(n); break; } } と書けば良い
ここで添削してどうすんの!
あっ反射的にマジレスしちゃった。 すごい添削だったw
Javaでやたら変数をnullで初期化する奴は死ね!!! 定数で置き換えられる文字列なのにいちいち StringBuffer b = new StringBuffer(); b.append("SELECT ~ FROM"); とかやつ奴は死ね!!!そしてそれをわざわざメソッドにしやがって死ね!!!
>>617 こんなところに毒つく前に、黙って直せばいいだろう。
とかいうと、勝手に弄るのは云々、なんて返してきそうだな。
おかしいコードを良い方向に直せない会社は、確かに辞めた方が良いだろうね。
>>618 偽装請負の身に無茶を要求するな。
とりあえず死ねと言っておけば聞いた連中だけは真似しまい。
この会社辞めようと思ったソースコードスレで、 変なソースの内容を書いたりコード晒したりすると何故か説教される。
おかしいコードを判定するのに、一体どうやって判定するかだが…… うちの会社は自分を信じる以外にない。 他の連中がおかしすぎるコードを書いている中で、自分だけが正しいと言い切れる自信はない。 やはり、複数の人間で言葉を交わさないとコードがどーこー、言いづらいものがある。 ただ、それでも確実に違うと言い切れるコードだけは書かないでくれ。 CreateFileで失敗すると確実に落ちるアプリをソースなしで渡さないでくれ。 おまけに、そいつと共有メモリ使って通信するプログラムとか作らせないでくれ…… 共有メモリの構造体のファイル名が char szFileName[_MAX_PATH]; なのは仕様か? どう見てもバッファサイズ足りないだろうが…… 隠しファイル開くと落ちるのは仕様か? いくらなんでも気付くだろうが……
>>620 Which is correct?
- 説教する奴がこのスレの住人
- 接続のログとられているか通信を傍受されてる
誤解招きそうだな。というか、普通に書き間違いっぽい。 >共有メモリの構造体のファイル名が を >共有メモリの構造体のメンバ変数が に変えておく。
>>619 変なコードを書いた奴が、このスレを見てることを祈るしかないってことか…。
現場からアプリ(外注作)がフリーズした、と連絡があって、 見てみたらDBがロック掛かりっぱなしになってた。 で、原因追っかけてたら、 頼むから完了報告のメッセージダイアログ(OKボタンだけ)の応答が帰るまで コミット保留するなよ……orz ちなみにそのアプリ、余りに外注のレスポンスが悪いんで ソースごとこっちに引き上げたんだが こういう致命的な奴でないものまで含めると突っ込みどこは枚挙にいとま無く。 明日も戦いだ……
中で何をしてるかは見せなくて良いけど、今どういう状態なのかをユーザーに見せるのは大切な事ですよ 何も反応がないより「今処理しています」の表示を見せる事でずいぶんクレームは減る 見せすぎなのはアレだけど・・・
>>617 ウチもそんなのばっかりだよ。
JSPが全部String/StringBufferでつくって、out.printlnとかやってる。
>>621 >隠しファイル開くと落ちるのは仕様か? いくらなんでも気付くだろうが……
凡庸なプログラマは自分のコードをテストしない。
>>628 良心あるプログラマはまさかそんな人間がいるとは思っていない。
隠しファイルを開くと落ちるってのは、具体的に何が原因なんだろ……
存在が認識できん
シンボリックリンクのリンク先が無かったりすると落ちることならよくある
自分でテストするのはきついよね
if(flg){ ・ ・ ・ goto:Next; } else{ Next: ・ ・ ・ } え、gotoとelseいらなくね?
if(flg){ 処理A 処理B }else{ 処理B } なんだろうな...
むしろ if(!flg){ B; }else{ B; A; }
if(flg){ A; } B;
639 :
636 :2007/12/21(金) 20:17:19
あ、それだw
まともでないコードに出くわすと思考が止まるなw
//10秒待つ Sleep(1000); //8の倍数にする。 x += x % 8; 義務教育って大事だと感じた。 ちなみに、Sleepの単位はミリ秒
sleepは言語によって_秒だったりn秒だったりするから困る
義務教育云々より論理的な思考を直感的にできないのが問題じゃない?
>>641 8の倍数ワロス
x -= x % 8;
x &= (~7) # Perl
8の倍数にするって始め意味がわからなかったw
下3ビットは0でマスクが単純そうだけど、2の乗数以外もでるなら
>>644 かな
x *= 8 だろ常考
それは8倍する(w 7で and するのは「切り捨て」型の演算だから、四捨五入で8の倍数にするなら(x+4)&7、 切り上げ型の8の倍数なら(x+7)&7 にする必要があるね。
x = 8 でいいだろ
8や8倍した数は確かに8の倍数だな。間違いないw
>>650 「8の倍数にする」だけだと仕様として不完全、ってことだよな。
>>642 4ミリ秒が単位な処理系があった。
sleep(250) で1秒ウェイト、引数の型は unsigned char だったw
0は全ての数値の倍数!
>>652 そう定義されるとすべての最小公倍数は0になる罠
ゆとりきたーーーーー
>>654 マイナス値を許せば、最小公倍数は存在しないことになる。
マイナスへの拡張は世界が広がる。 無限小はマイナス無限大のことになるし。
最小公倍数の定義が正の整数だとは考えないのか?
そしてここで虚数の概念を導入
虚数だと大小の概念が一般的には無くなる
大小の概念を入れようと思えば入れられるけどな。
そろそろネタがなくなってきたな...
脱線するのはこのスレではよくあること
とりあえず x が整数型ではないというオチで終了だな
去年の話だけど、派遣のアホが try: 1000行くらい except: return 1 って感じのソースを大量に作ってくれた。 キャッチされなければバグがないと思っていたようで、お正月はこれとにらめっこするはめになった。
派遣としては、阿呆と言われ様が何だろうがどうせ頑張っても搾取されるだけなので 馬鹿上司の目を眩ます為に適当に書いたに過ぎません。
Webショップの運営スタッフ 求人/有限会社エコッテ | 求人情報 Find Job ! あーまたエコッテの使い捨て人員募集の季節だなーw 今度は誰が■介店長のおもちゃになるのかなー((( ;゚Д゚)))ガクガクブルブル エコッテの忙しい時だけ雑巾役使い捨て人員大募集! あなたの任務は■介ちゃんが気に入る事をすることです。 あなたの仕事はwebショップ全ての運用です。 他の人員は遊ぶ為にいるだけですからしっかり働いて下さい。 エコッテは社長よりも■介店長ちゃんが絶対です。 社長の意見は■介店長が決めています。 どんな扱いをされても言う事を聞きなさい。 プライベートでも何かを無理やり強要された時も聞きなさい。 そうしないと解雇です。 エコッテの場合社長よりも店長の■介ちゃんの機嫌で流れが変わるから大変だおー 社長の意見より■介ちゃんがエコッテでは何でも決めるんだおー 社長は宮崎県の恥だおー 柄の悪い社長だから東くんが可愛そうだおー おばちゃん社長は金に汚いおー 親切ぶりっ子得意の演技に騙されちゃ駄目だおー Webショップの運営スタッフ 求人/有限会社エコッテ | 求人情報 Find Job ! 何時も嘘が多いー まる投げだおー 社長は■介に任せてるから大変だおー ■介の下は最悪だおー ウー c(`Д´c) エコッテの伝統エコッテの使い捨て人員募集の季節だなーw Webショップの運営スタッフ 求人/有限会社エコッテ | 求人情報 Find Job
>>666 自分ところでException上がるといろいろ面倒だからね、派遣の立場なら俺だってそうする
俺も派遣されたら そうすることにするか
流石にソースレビューくらいするだろう・・・
結構しない所、多いよ。
レビューもしない テストもしない 検収もしない 責任が不明瞭 方針があいまい しかし文句や愚痴は言う。
ソースというかログ出力 ...("Listen failed"); ...("Accept failed"); の下に ...("Tusin failed");
何かと思ったら通信のことか
>>671 しないよ、結合して動かしてログに例外が出てから文句が来る
引数がおかしいとかで例外にするのが正しくても文句が来たら失点1
"Junsei failed."
Jinsei って書こうと思ったのにfailed
純正Windowsじゃなかった場合ですね
↓こんなコメントが多数あるとちょっと・・・と思う /* 暫定。ID:xxxxの不具合対応。今回はこのままで。次期開発で何とかしてください */
日常茶飯事です('A`)
// 適当に確保 // とりあえずこれでOK とか普通にあるんだぜ。何を言ってるのかわからn(ry
経緯を理解すれば意味もわかる。たぶん。おそらく。きっと。
グローバル変数の名がtmp1、tmp2、tmp3とか泣けてくる。
たぶん、温度の1,2,3なんだよ。きっと。もしかしたら。
意外と添付ファイルの1,2,3だったりする
実は684は音響系ソフトウェア開発のメンバーで、同僚の書いたtmp1とかは音楽のテンポの事だったりとかして
なにその妙に前向きな解釈
テンプレート(フォーマット的な意味の)の番号かもしれない。
座標系の計算してる途中のループカウントの変数 z とかカンベン。。。。
>>690 それ意図的に組んだトラップじゃないのかw
ループカウンタをi〜zまで使うほどのループだったりしてな
もうそれならいっそ配列で扱ってもいいね。
そしてそのポインタをループ内で動かしたりする謎の動きを
"i"はimportantの頭文字。 重要な値を格納してグローバル変数として使うには最適だよな!
先輩が作ったソフトで。 処理中に一時的にできる中間ファイルのフォルダを、GetTempPathで取得したフォルダに したはいいが、用が済んだ時点で削除する処理を入れ忘れたのでtempフォルダがとんでもない ことになり、しかもウイルスと勘違いされてアンチウイルスソフトが警告吐いて大騒ぎになったことがある。 システムに関わるフォルダを触るときは気をつけようと思った。
そういうのってまともな設計書とテスト用意していたら気づくよね。
・tempフォルダはシステムにかかわるフォルダではない ・ウィルスと勘違いされるんなら、フォルダはどこでも関係ない で、何が言いたいんだろう?
デバッグコードが#ifdefで切られておらず、そのまま製品に載ってるとかあったな。 そんで改修理由にそんなこと書けず特に問題もないのでそのままってことが・・・ とある機能内でエラーが発生した場合、 かなり詳細なdumpが画面に出力されてしまうっていうヤツなんだけどな
沸点低いねー
>>699 画面に表示されず、ファイル出力とかならOK?
printf("これが出ちゃったらかなりヤバイよ〜\n");
これが出ちゃったらかなりヤバイよ〜 これが出ちゃったらかなりヤバイよ〜 これが出ちゃったらかなりヤバイよ〜 ・・・何度も出るとこうなる。
>>561 デバッグログを仕込むときは、このコーディング規約の方が
楽でいいぞ。
なるほど 考えてみれば確かに
707 :
仕様書無しさん :2007/12/30(日) 10:03:15
goto falseend; goto trueend; goto falseend; return false; goto trueend; return true; こんなことするよりは、returnをデバッグ用とそれ以外に置き換えたほうがいいよな。 誰かやってる?
なんかゲームのマルチエンディングシステムみたいだなwwwww
>>561 自動解析しやすいってのもあるな。
あとアセンブラレベルまでやる
必要がある分野でも楽になる。
.net 以前の VB の話ですが、 GoTo Continue はだめですか?
>710 あんまし見てて気持ちのいいモンではないが ループにbreak相当はあってもcontinueの無い言語だからなぁ。 100%禁止とも言いかねる
On Errorならしょうがない
>>710 resume next
よりは一億倍マシ。
サードパーティ製品のサンプルにresume next で書いてあるの多くて困る・・・
resume nextした上で全ての命令でerrの判定すると障害箇所が特定しやすくていいと思うんだが そんなソースコードは見たこと無いな
716 :
仕様書無しさん :2007/12/31(月) 06:24:44
unsigned int xxxxx ; char xxxxx ; HOGE xxxxx ; 最後のセミコロンを合わせるのはなぜなんだぜ?
717 :
仕様書無しさん :2007/12/31(月) 06:26:16
unsigned int xxxxx ; char xxxxx ; HOGE xxxxx ; 間違ったんだぜ?
>>717 それはあなたのところのローカルルールだと思いますよ
メーカーのサンプルコードでもそういうのは見たことがないですから
719 :
仕様書無しさん :2007/12/31(月) 10:05:17
>>716 >>なぜなんだぜ?
↑最近よく見るんだが、何これ? 若者言葉?
>>719 多分、ギャグマンガ日和のソードマスターヤマトが元ねた。
職業プログラマじゃないのでスレチだが、 昔VBで作ったゲームのソースを久しぶりに見てみたら、タイマーコントロールを12個 並べて処理をやってた…orz しかも全部同じインターバル…
昔書いたソースが恥ずかしいのは誰でも同じさ
青春の汚点
ついこの間書いたソースでさえ納期に追われてとんでもない事になっているというのに
中年の汚点
動けば金貰えるから気にしない
その意識でいる限り、下手なソースを繰り返し作る事になるから、毎度毎度気にすることにしている。
>>727 一度作ったソースには二度と手を触れない俺最強!
そんなソースから生成されたバイナリがお前らの家庭の中に満ちあふれている事実wwww
>>728 一度作ったソースに手を触れるかどうかではなく、一度作ったソースに対して悪いところを見つけて次に生かすかどうかという意識が問題。
人間誰だって最初は間違ったコードや、非効率なコードを書くものだ。
常にそれらを反省し、次はより良い物を作ろうという意識をどれだけ持っているかが重要になると思う。
俺は、それさえ意識していれば、既存コードに手を触れる必要なんて無い場合もあるとは思っている。
ただし、手を触れずに捨てる事はあるがな。
>>729 自分が書いたクソコードなんか他人に押し付ければ問題なし
他人が修正しくじっても元ソース書いたヤツの責任問われることはない
修正しくじったやつは責任問われるというか、後始末に追われて大変なことになるだろうけど
>>730 おまいさんの能力が生涯ゴミクズレベルだというのはよくわかる
>>731 弱小なPGなおいらだけど
731の意見には賛成するわ・・・。
>>731 禿同
その場を切り抜けりゃどうでもいいって技術者として恥ずかしくないのかね
禿同
探究心失ったら終わりだろ
では、キミには中途半端な再現率の VBすらまともにかけないオッサンの書いた おそろしく単純なバグが積み重なった VBAのフォームのバグ原因を探求する権利を与えよう
>>736 thx
興味がわいたら解き明かしてみるよ
738 :
仕様書無しさん :2008/01/01(火) 01:02:44
>>736 それを生み出したおっさんの脳みそかき回したら答えが分かる。
739 :
735 :2008/01/01(火) 01:06:37
>>736 申し訳ありませんwwwwwwwwwwwwwwwwww
そのおっさんの頭にパラレルでもUSBでもLANでも つけてやってプリンタでも ダイレクトしてやれば、「なんか」でてくるだろうよ。
んで原因はMSのバグだったりするオチ
新年早々笑えねーよ...
皆さん、あけおめ ことよろ
新年早々だけど辞表を書くか・・・
Winで開発しているとき、CreateFileとかで、 CreateFile("FileName", …… とかやられるとムカつくのは俺だけだろうか。きちんとTCHAR使えと。
>>746 ありえねーw
せめてどこかに定義したファイル名変数にしろと。
LPCTSTR g_lpcHogeNameとかな
>>747 いや、上のはあくまで、ここに書き込むため適当に書いただけで、
ファイル名変数にしても、型がcharになっちゃうんだよ。
LPCTSTRとか言いながら、"xxxx"みたいなのを代入していたりするわけ。
要するに、TCHARをcharとして使っている。
749 :
仕様書無しさん :2008/01/01(火) 15:24:17
>>748 LPCってコンスト宣言でしょ。
それって”文字”と同じですよね。
なんかハードコーディング嫌いというか 定数化変数化にやたら拘る方が最近多いみたいなんだが 文脈をちゃんと読めば論点がそこじゃないことぐらい理解できるだろ?
>>749 代入つーより、初期化か
LPCTSTR xxxx = "yyyyy";
とかな。こんなやつ。
だから、要するにTCHARとcharの混合が許せるかどうかと……
すべてただの文字列として使ってればおkだな そして区別つかない奴はただの文字列としてだけつかうだろう
なんかちょっと前にも文脈と関係のないリテラル数値に一生懸命突っ込んでいる人を見た気がする
ただの文字列って、明らかに文脈が分かってない人の言葉だな。 TCHARって意味分かってるかな。 CreateFileの第一引数の型が何なのか分かってるのかな。 絶対分かってないだろうな。
うちはコーディング規約で LPTSTR aaa="bbbb"; って書かなきゃいけないことになってる Tの意味をわかってる人がいないから正しく書いても理解してもらえない わかってる人がいないのにTを使わなきゃいけない理由は謎
unicodeに丸っきり対応する気がなくてWinAPI使うときはちゃんとAの方を明示的に使えってこと? それともunicodeに対応する気無しなのがダメ? 意味もなくTCHAR使うのと微妙に別問題な気が
>>756 違う型を混ぜるなというのが一番言いたい事。
まぁ、unicodeに対応するつもりが無いんだったら、Aでも良いんじゃないかとは思う。
だが、それでな。こんなのも見た事があるんだわ
char fileName[_MAX_PATH];
って奴。もちろん、文字列のバッファサイズが足りなくなって落ちる。
これに対応しようと思うとTCHAR使って欲しいもんだ。
そうすると、少しは落ちにくくなる……
759 :
仕様書無しさん :2008/01/01(火) 16:59:18
わざわざ (LPCTSTR)"hogehoge" って引数に渡してるの見たことある
761 :
仕様書無しさん :2008/01/01(火) 17:41:03
unicode UTF-16 いいよぉ
プログラム全体がcharで書いてあるのに、Windows API を呼びだすときだけ、 TCHARを使わなければいけないなら、それはそれで萎えるぞ。 かといって、CreateFileAを使うのも、なんか違うような気がするし。
単純に、 CreateFile(_T("hoge.txt"),... ); にしろってことじゃないの?
Tの意味わかってないって・・・・。 単純に""で囲んじゃTの意味が無いよなw
・・・は?
##と、組み合わせて _TSTR(hoge.txt)みたいにかけるようにして
>>763 既にコードがchar型で色々なところまで至っている場合は……
変えなきゃならないところは、別にCreateFileの引数だけじゃない。
それを変えるだけで、プログラム全体にまで変更が及ぶケースがある。
統一せず、APIだけTCHARに1票。 インターフェース境界なんだからしょうがないと思う。 そういうところはあえて汎用的な型にするのは普通かと。 この逆の状況が頻繁に起こるのが、Winアプリにオープンソース組み込んだ場合。
そこら辺は意見の分かれるところだろうな。
ただ、知らないで使ってるとか、どう考えてもTCHARとcharで手間が変わらないとか、そんな時には殺したくなるな。
特に
>>760 書いた奴なんて死ねば良いのにと思う。
770 :
仕様書無しさん :2008/01/02(水) 00:11:02
(LPCSTR)でキャストなら普通にするよね
>>770 しない。
渡した先でLPCとして処理するから特に気にしない
俺だけかもしれないが。
772 :
仕様書無しさん :2008/01/02(水) 00:40:09
>>771 でもワーニング出るから無能役立たず使えねーって言われるよ。
>772 ワーニングが出ることをそこまで気にする現場があることにびっくりだ ……いや、気にすべきだと思うけどね俺は
774 :
仕様書無しさん :2008/01/02(水) 01:22:53
>>773 その割にはmain()が受け取る引数はメモリリークしてたけどね。
unicodeに対応する気ないから全部charならいいんだけど
LPTSTR hoge="hogehoge";
みたいにT使っといてunicodeに対応する気なしとかは非常にバカに見える
でもってそういうソースに修正入れるときとか元のソースの秩序を壊さないように
俺もそれに合わせてバカコード書いたり
>>768 合わせるなら型よりも型にあった中身にしなきゃいけないことのが難易度高い
となると全部ちゃんとTCHARにしたほうがかえって楽だと思う
と思うが自信ない、反論求む
776 :
仕様書無しさん :2008/01/02(水) 01:25:21
NTFSでは自動でunicodeになるんじゃないの? 短いファイル名はASCIIとシフトJISと思うけど。
そんなキャストしなきゃ警告でるって警告レベルが厳しかったりするのかな
とにかく警告が出てて、かつ原因が明確ならキャストで黙らせるのが正しいと思う
たいていの人は
>>770 は警告黙らせるためのキャストには見えないと思う
778 :
仕様書無しさん :2008/01/02(水) 01:59:36
warning出しちゃだめだろ。 っていうか気にしない現場なんてあるの? だからといってとりあえずキャストってのもどうかとは思うけど
>>776 お前にはプログラムを組ませたくないな。
780 :
仕様書無しさん :2008/01/02(水) 04:50:02
>>779 なぜ
ところでこれ知ってた?
>この問題を解決するには、クロスプラットフォームで作業する場合はファイル名に濁音や半濁音を使わないというルールを守るしかないでしょう。
781 :
仕様書無しさん :2008/01/02(水) 05:14:11
誰もTマクロを理解してないと思われ
知らないってことは、恐ろしい・・・・ 教えても理解できない(教え方も悪いかもしれないけど、こんな簡単なこと分からないはずがないと思うのだが) いったい、どうすれば
784 :
仕様書無しさん :2008/01/02(水) 06:24:24
>>779 あんたいちいちファイルシステムがNTFSなのかFATなのか判別して文字コード変換してファイル名操作してんの?
>>780 ファイル名にASCII文字以外の文字を使ってることに驚きなんだが・・・
今時のコンパイラなら例えば”ほげ.cpp”をちゃんと読み込んでくれるだろうとは思うが、
それでも日本語を使うのはおかしいだろ
786 :
仕様書無しさん :2008/01/02(水) 10:02:54
>>78 オレがその質問に答えよう
アンチ ブルーユニット システム
のことだ
出典:KURAU Phantom Memory
上からずらっと書け 関数を使うな(ソースを追いにくいんだそうだ) といわれたとき決心した
それは決心すべきだな
べきだな
関数内クラスでクロージャもどきを書いて抵抗しろ。
792 :
仕様書無しさん :2008/01/02(水) 14:57:58
>>785 だれが開発プロジェクトのファイル名の話してる?
おまえはヘッダ読み込むのにダブルクォーテーションでくくってるってことなのか
自作コンパイラでも使ってるってことなのか。
何だこの流れ カオスすぐる
>>792 んじゃ、何の話をしてるのかはっきり言ってみろよ
1度だけ、後出しじゃんけんとか言って煽らないで聞いてやるからよ
776とは作業したくない
ってか、純粋に
>>776 の意味が分からないんだけど
NTFSだと、自動的に「何が」「どのタイミングで」「何から」unicodeに変化するんだ?
また、一々変化するってことは、unicodeに変化した後また戻るって事か。
それはいつのタイミングで、戻るんだ?
>>746 が出てきてどうすればOKなのか書けばヨロシ
798 :
仕様書無しさん :2008/01/02(水) 16:18:44
うん。そうだな。 CreateFile("FileName", …… このコードでNTFSだと何がどのタイミングで何から何になりそれがどう影響するのか。 このコードでFATだと何がどのタイミングで何から何になりそれがどう影響するのか。 このコードでNASだと何がどのタイミングで何から何になりそれがどう影響するのか。 それを最初に説明してもらおうか。
799 :
仕様書無しさん :2008/01/02(水) 16:19:28
そういえばHPFSもサポートしてるんだよな。
>>776 は最近のWindowsがファイル名を
内部的にUnicodeで扱っているという話を
どこかで聞きかじって、8.3形式の問題と
取り違えてこんな発言をしたと思われる。
彼はまだこれからの人材だ。見逃してやってくれ。
つか、
>>776 がたとえ不完全な知識だったとしても、
普通に考えれば自動的に変化するなんてことは思いつかないだろ。
明らかに、論理思考力が欠けてるんじゃないかな。
802 :
仕様書無しさん :2008/01/02(水) 16:26:38
でも実際NTFSでもFATでも気にしてないけどちゃんと動いてるよ。 自動で処理できないならWindowsAPIって必要ないんじゃね?
>>798 >CreateFile("FileName", ……
>このコードでNTFSだと何がどのタイミングで何から何になりそれがどう影響するのか。
このコードだと、実行時にCreateFileAというAPIが呼ばれ、
その内部で、文字列"FileName"が入力の文字コードからUnicodeに変換されて処理される。
どう影響するか、と言われても特にこの変換が影響する事は無い。まぁ、せいぜいオーバーヘッドがどーとか、そんな話。
>>803 じゃあCreateFileはFATファイルシステムには使えない危ないAPIってことですね。本当にありがとうございました。
日本語で250文字くらいのファイルが作れてしまう、ってのもねー。 Find*FileAがそのファイルで失敗しやがってもー。
vfatって組み込みで使うと著作権料とられるのがムカツクよな。 unicodeへの変換テーブル作る気は起きんからいいけど。
続けたいなら続けたいでかまわんが 前提をきっちり整理してからにしてくれ 論点が擦れ違いまくりの煽りあいだけのカオス状態はもう勘弁
空気嫁糞コテ 一度死んどけ
810 :
仕様書無しさん :2008/01/02(水) 16:47:01
じゃあシフトJISに見えて実はシフトJIS互換UNICODEで書き込んでたのか。
811 :
仕様書無しさん :2008/01/02(水) 17:05:41
>>808 前提だな。
NTFSロングファイル名はUNICODE
NTFSショートファイル名はシフトJIS
FAT16、VFATはシフトJIS
FAT32は不明。CP132ってなに?あ、なんかUTF8とか書いてある。
そうか。ショートファイル名は8.3だからASCIIじゃないといけないと思ったがUTF8なのかな。
でもFATはシフトJISじゃないとWindows9xで扱えないよな。
え?VFATになったときにUTF8になったって?まじですか?
ディスク上でVFATはUNICODEだけどAPIがシフトJISだから文字セットがシフトJIS・・・なるほど。
812 :
仕様書無しさん :2008/01/02(水) 17:08:57
そういえばWindows95で使ったディスクをDOSで覗くとファイル名壊れまくりだったもんな。 文字らしきものが見えなかったのは文字コードが違ってたからか。
いろいろ勉強したいので
>>811 が参照したソース希望。
814 :
仕様書無しさん :2008/01/02(水) 17:25:48
DWORDをdoubleに置き換える上司。 配列の添え字にその変数を入れてエラー。 同じことをしてdouble変数でビットテストしようとしてエラー。 客先での言い訳が「lccなんでコンパイラ側が対応しきってないんですよねー、てへへー」だった。 もう帰ってくるなと思った。
お前が対応できないんだwwwwwwwwwwww
819 :
仕様書無しさん :2008/01/02(水) 17:41:59
>>817 NTFSDOSってなくなったんだよな・・・
まあLinuxでいけるしNTのコマンドラインモードもあるけど。
NTFSfor98を試用するように薦めたんだけど、
期限が来て、突然見えなくなって消えてしまったんだよな。
その人が担当したすべてが消えちゃったとか。
その一週間後、その人は別のとこに異動。まあ外注だったし。
地図情報と観測情報を組み合わせてメッシュ表示する アプリケーションで、 スタティックコントロールが3000個あまり貼り付けて あったのを見たとき、目眩を覚えた。
//this fanction は connectingにcallするべし。 お前はコメントの書き方を勉強するべし あと、fanctionって何?
fanction [f ae n k sh o n]
>>821 そういうキッツイコメントだと、”this fanction”の実装に期待が高まるのが人情。
とりあえず、上中下、松竹梅とかでかまわないから評価してみないか?
connectingにってのが形容動詞?
ルー大柴っぽくコメントするべし
ならセルフ通訳も添付w
ルー大柴のテンションで実装すると、全てのクラスをフレンドにしたい気持ちになる
ワロスwwwwww
829 :
821 :2008/01/03(木) 23:03:25
>>823 すまんが、中身についてはあまり書き込めない。
だが、多分期待通りの無いようだと思う。
一番気になったのは、必要も無いのにnewでメモリ確保してるところかなぁ……
と言っても、ソース見なきゃ分からんわな。すまん。
830 :
821 :2008/01/03(木) 23:04:10
無いよう→内容
内容が無いようってか
_, ._ ( ゚ Д゚) ( つ旦O と_)_) _, ._ ( ゚ Д゚) ( つ O ガシャ と_)_) __ (__()、;.o:。 ゚*・:.。
プログラムの内容が無いよう ↓ main(){}
↑NULLプログラム
NullProgramarException
この早さなら言える ぬるぷ
無いよう.html <html> <head></head> <body></body> </html>
どのHTMLバージョンか忘れたが、title要素は省略不可だったな。
規格に準拠してるサイト自体が少ないこんな世の中じゃ
ポイズン
例外が零以外 catch(int x){ if(x) std::cout << "例外が零以外" << std::endl; }
投げちゃえるからしょうがないとはいえ やっぱintとか例外と関係ないもんthrow-catchされるとそれだけでイヤソ
hashtable.Add("0", abc) hashtable.Add("1", def) hashtable.Add("2", ghi) ねーよw
>>846 ・文字も入る可能性がある
・型はアレだが数字が連続していない可能性がある
・実はコード値だった
まあ考えるに、ディクショナリ脳に犯された奴のコードかw
ハッシュテーブルの何たるかを知らずに最近ハッシュテーブルの偉大さだけを知った無能上司に無理矢理書かされたんじゃね
VBでアレだけど 画面によって使用しているフォントが違うのは勘弁してホスィ・・・・・
いちいちフォントを変える暇人がいるとはな・・・ さすがVBだぜ
プロポーショナルは読みにくいとか 明朝にしてくれとかヘンな顧客も多い現実
CFont* pFont = new CFont(); //ほにゃらら CButton* pButton = new CButton…… pButton->SetFont(pFont); こんな感じで、全部のコントロールにフォントを割り振ってるのを見たことがある。 VC++、MFC
へぇ、ふぉんとぉ? ・・・ごめん、漏れ疲れてるんだ。
木枯らしに乗って去ね
>850 画面ごとに担当別だったんじゃね? ……それでフォーム4つにそれぞれ似て非なるプロシージャがあるなんて スカタンなシロモノが作られたりすんだけどなorz
漏れ画面に表示つる文字全部ファイルから読み込んでるぜ_| ̄|○
>>857 読み込むタイミングは?
昔、描画するごとにファイルから読んでるアプリを見たことがあってなぁ……
VC++、MFCだったんだがOnDraw(CDC* pDC)の中でファイルの入出力をガシガシやってた……
画像を表示つる場合は画像作成時のみ。 ダイアログの場合はCreateちたときでつ。
。。。。。。。。。。で?
バランス感覚のない奴ってのはどこにでもいるんだな
俺、閉眼片足立ち3秒・・・
もうちっと足腰を鍛えませう
>>862 アンダーグラウンドのサービスを呼ぶ
どんな時も万全に応えられる
客A「フォントはMSPゴシで」弊社「了解しますた」で、MSPゴシで作成 ちょっと経過してから、客Bから 「客Aのところと似たようなのが欲しい、ただしフォントはMS-UIゴシで」弊社「まじっすかorz」 さらに数日経過して、客Cから 「客Aのと同じようなソフトだけど○○画面と○○画面はMS明朝でヨロ」弊社「勘弁してorz」 ・・・・ということが続いたので、うちもフォント名は外部に出して、起動時に設定するようにしてるorz 非VBerから見たらアホみたいなことしてるんだろうなあ・・・・とは思うけど。
orz orz orz orz orz
フォントとサイズは設定ファイルだろ。 ボタン等の文字列も外だしだな。英語板とかあるし。
868 :
仕様書無しさん :2008/01/13(日) 19:24:28
本来はテキストは全部専用ファイルにするべきだろうけど自分はやってなかったな。 めんどくさいもん。
ま、オレは中出しだがな。
フリーソフト作家かなんかじゃねぇの
VBでフォント変更くらいなら一括置き換えできるだろう
一括置き換えって何?
つか、普通バイナリリソース以外はテキストエディタで開いてみるだろ。 でもって必要ならsedとかperlとかつかって一括変換とか普通にやるだろ女子校
ごくふつーに作ってればVBのフォント指定はfrxファイルに入るはずだが。 frxのバイナリフォーマットって公開されてたっけ? 少なくともヘルプにはなかった。
はいはい コントロール全選択してフォント変更でもしてろニダ
VBなんて(笑)
おまいら大丈夫ですか? VB6迄なら、frmファイルをテキストエディタ開けば デザイン部分のソース見れるから一括置換で終わる 実際に着手後に変更決まってやった事あるよ VB.NETは使った事ないけどさ、 C#は2003以前、2005以降で開く所は違うけど イベント追加する辺りに記述があるじゃん 似たようなもんじゃないの?
879 :
仕様書無しさん :2008/01/14(月) 02:21:41
そこでスクリプトですよ。 テキスト属性のコントロールを一覧で取得して・・・・あ、画面のプロパティではコントロールとして取得できないんだっけ? でもコントロールをダミーで貼り付けないと動作しないからなんとかなるよな?
.NETならめんどくさいからFormを継承してOnLoadをオーバーライドして 親のイベント呼んだあとにthis.Controlsコレクションを再帰的に追ってきつつ フォントを変更するような処理をいれたFormクラスを作る。 そんで現状ある全画面の継承元をFormから 作ったFormクラスに変更して終了。 処理速度?しらねーよww
>>870-871 あやまれ!
>>865 みたいな受託案件で普通に英語版さらに多言語版の話も出してくる俺のとこの客にあやまれ!
いや俺も嫌ですが
882 :
仕様書無しさん :2008/01/14(月) 07:53:58
>>881 そらレアケースでご愁傷様、いやまじで可哀想・・・。
海外拠点のある仕事ってやったけど(日米香港上海)
そもそも業務が違うから結局使いまわしなんか
出来なかったけどなあ。商習慣全然違うもん。
んでもOfiiceとかでかい製品になれば当然っちゃあ当然だよな・・・
>>870 海外支社(使うのは外国人)に展開するってこと、たまにあるぞ
Ofii(・∀・)ce
受託ソフトの他国語版が欲しいと言われるのは突飛な発想にもレアな話にも思えないんだが 工場なんかだと商習慣もあまり関係ないし国内と同じシステムを使う可能性大きくない?
うちではよくある。 ただし、デフォルトは英語で作る。
ないとはいえないけど
>>867 のように当然でしょというほど
当然ではない
という話ではないのかな
多国語版って、量はなくても国際展開の工場とかだと普通に有るぞ。 半導体とか半導体とか、あと半導体とかね。
>>870 の発想が貧困過ぎたというだけの話ではないか
アラビア語とか、ヘブライ語とか・・・ 右から書く言語に対応って・・・ orz負けた。
たとえばIEを「地域と言語」コントロールパネルでアラビアあたりに 設定して起動すると面白いぞ。スクロールバーの位置とか。
レンバスかよ...
RightToLeftプロパティはVisualStudioではおなじみだけど使う事にはなりたくないなw
みんなにちょっと聞きたい。 複数の判定処理を決められた順に行って、全て正常なら正常時用後処理をしてTRUEを返し、 どれか1つでもFALSEならエラー時用後処理をしてFALSEを返す関数を作ることになったのだが 1:最後にreturnが確実に呼び出される無限ループ内で判定を行って、判定がFALSEならbreakする 2:tryブロック内で判定を行って、判定がFALSEなら空の例外をthrowする 3:判定のみを行う関数と、その結果を受け取って 正常時用後処理orエラー時用後処理を振り分ける関数の2つを作る 上の3つでプロジェクトメンバーの意見が分かれてしまった。どれが一番いいと思う?
2は論外。 それに、俺なら1,3じゃないやり方をする。
本当に2を思いつく奴って、いるんだなあ・・・・ コードコンプリートとか、ああいう本の悪い例の 中だけに存在するんだと思ってたよ。
901 :
898 :2008/01/17(木) 16:42:22
ちなみに俺は最初1を推してたけど思い直して3に一票入れた。
2はうんこコードしか残さないド低脳な外注が提案したので眼中に無し
>>899 他にいい方法があれば是非教えてくれ
一瞬、コードコンプリートが2を推しているように読み取れた
自分なら単純に判定用のboolean変数用意するけどな。 とりあえず2の奴にはコードコンプリートを読めと言っとけ。 ・・・今度はコードコンプリート厨になりそうでイヤだが。
catch(Exception e) で受けるのは論外だが ちゃんとExceptionのサブクラス作ってやるんだったら2番も悪くない エラー処理が複数になった場合も対応しやすいしfinallyに後始末も書けるし
いやいやいやいやいや
3なら通常処理とエラー用の処理を別々に試験できてお得だよ
みんなエラーを例外を使わずにやってるの? その本を読まずにいってみるテスト。 空の例外投げるなんて馬鹿だが。 newしたものなんてスマートポインタに入れておけば解放してくれるし、コーディング楽だろ? 投げる例外クラスにエラー情報いれとけば、処理の振り分けやらもできるし。
コーディングが楽だからという理由で例外を使ってる奴は死ね
コーディングが楽だという理由いがいで、例外使う奴はもっと死ね。ていうか死ね。
業務と関係ないフラグと分岐がいっぱい出来るくらいなら例外使ってくれって思うぜ
どうせ、std::bad_allocやMFCの例外クラスのcatchしてるんだろ? まさかしてないとか(笑) してるなら自分のも例外クラス使えばいいじゃん。まぜこぜだと一貫性がない。
try〜catchつーても所詮gotoよりちょっとスマートな大域脱出だろ
「要するに」とか「所詮」とか言って話を終わらせようとする奴は 考えるのが面倒くさくて思考停止してるだけだって
C++とgotoは相性が悪いから使わない。
それはlongjumpとどう違うの?
ヘタレのBUGの言い訳のための機能
OOP否定論者は大量の条件式を書くわけですね。 ステップ数と保守のしにくさを増すだけ。
わかって使ってれば、いいんだけどね?
920 :
918 :2008/01/19(土) 17:16:54
僕、例外とOOPの区別が分からないの、助けて〜!(笑)
(苦笑)
918 != 920 だからな。
パフォーマンスの話をすれば、例外は重い。 けど、別にそんなもんは蚊ぐらいなものだから、どうでもいい。
.netみたく、初回の例外発生時に エラーメッセージリソースをだーっと舐めるようなことしてると 洒落にならんだろうが…… ↑は流石に改善されたんだっけ?
3だよな
>>903 の言ってる判定用のboolean変数を用意するやりかたって
↓みたいな感じでいいのか?3と比べるとあまりスマートじゃない気がするが
bool flag;
flag = false;
if(!条件A)
flag = true
if(!flag)
if(!条件B)
flag = true;
if(!flag)
if(!条件C)
flag = true;
if(flag)
{
//正常時処理
return true;
}
else
{
//エラー時処理
return false;
}
あ、最後のflagの判定が間違ってた。脳内変換たのむ
自分ならB,C条件のときもflagの判定はしないかな。好みの問題かも。 まあスマートに見えないかもしれんがわかりやすいと思う。 後処理が長くなるなら関数で処理してもいいんだし。
>>903 のは
bool flag;
flag = true;
flag &= 条件A;
flag &= 条件B;
flag &= 条件C;
if( flag ) {
// 正常時処理
return true;
}
else {
// エラー時処理
return false;
}
みたいな感じだと思うが、これだと途中でエラーが起きたときに処理できないな。
途中でエラーが起きたときの処理が必要なのかは知らんが。
引き継いだプロジェクトにこんなのが・・・ bool flag; flag = false; while(1) { if(!条件A) break; if(!条件B) break; if(!条件B) break; flag = true; break; } if(flag) { //正常時処理 return true; } else { //エラー時処理 return false; }
まぁ IsConditionTrue() みたいな関数にならいいんじゃね。
>>933 こうすればいいんだな。
// 別に関数じゃなくてもOK
_Bool condA(), condB(), condC();
if(condA() && condB() && condC()){ normal_processing; return true;}
else{abnormal_processing; return false;}
936 :
仕様書無しさん :2008/01/21(月) 20:11:07
>>935 condA(),condB(),condC()全部実行されるって思ったけど、
最近のコンパイラなら問題ないか。
>>936 いや、最近とかなしにC,C++,C#,Java.Perl etcで逐次評価でしょ。
メジャーもので全部実行されるのはVBだけ。(VB7移行は知らない)
938 :
仕様書無しさん :2008/01/21(月) 20:22:55
>>935 評価順が前からって決まってたっけ?
いや、C系は前からだと思うけど。
処理系依存じゃなかったっけ?
>>937 VB7以降は
AndAlso ってのが追加されてる
if (condA() andalso condB() andalso condC()) then
// 正常時処理
else
// エラー時処理
end if
941 :
仕様書無しさん :2008/01/21(月) 20:27:01
hogea[i++] = hogeb + hogec[i]; こういうのはやめろって注意したことがある。 もっとひどいのだと↓みたいなこと平気でするから。 hogea[i++] = hogeb[++i] + hogec[--i];
>>938 評価順は決まってた気がする。
ただ
>>935 の場合、条件がfalseになった時点で評価を中断するかどうかは不定だったと思う。
決まってた気がする、とかって 何言語基準で話してんの? そんなん言語によるだろ。 処理系依存とかいってる奴もいるが そんな基本的なことも言語仕様にない クソ言語あったらみてみたいわ。
>>943 C系はa && bで&&で副作用が完了し、aがfalseなら評価やめるので正しかったと思う。
インクリメントを複雑に絡ませた
>>941 のパターンは処理系依存。
Javaの場合、
>>941 でも処理系によらず一定だったと思う。
>>941 やめろとかひどいとか以前の問題じゃね?
>>944 処理系依存というより未定義だから動作するかも保障されない。
>>946 あ、動かない可能性もあるのか。勉強になりますた。
>>944 >副作用が完了し、
副作用てなんだかわかってる?
知らないなら書かないほうが
いいんじゃない?
そりゃモナドを伴う処理のことだろ。
まだインナークラスと匿名クラスをふんだんに使った main関数一本のクソコードは来ていないなあ。
>>950 評価することで何かが変化するなら、・・・ってことなんだ
>>953 よく言っている意味が分からない。
たとえばね、
(a = 3) && (a++) なら、 aが最終的に4になるのが保証されているんだが。
ただ、 a = (a += 4) + (a += 3)、これは何になるか保証されていない。
&&や,や||を伴っていないから。そいつらが伴うことで式の間で副作用がちょん切れる。
それともアレか?
>>948 はaってのを見て変数一本だと勘違いしたのか?
なら、式だよ。式一般だよ。
>>954 >最終的に4になるのが保証されている
a ≠ 3の場合にaが何になるか教えてください。
>>955 Cかつ、signed a だとして、
a = 0 ならa = 0のまま。これ処理系依存なのか?
それ以外なら a = n だとして a = n + 1。これは必ず。
オーバーフローは考慮しない。
958 :
仕様書無しさん :2008/01/21(月) 21:57:20
>>957 最近Basic系ばっか見てたからつい比較だとおもた
if (p != NULL && *p != c) .... これが処理系依存なわけがあるものか。
だよなあ。
なんか
>>954 が一人違う話をしてる気がするんだが。
もともとの話って
>>935 だろ?
副作用の話なんてしてないじゃん。
>>941 とごっちゃになってない?
VBで同じようなことを書こうとするとハマるぜ? ショートサーキットじゃねーんでな
基本JavaでVBみたいなコーディングされたら殺意沸くけどな。
もうみんなごっちゃでわけわかめw funcA( ) && funcB( ); funcAが必ず先に実行される。funcAの戻り値が真なら続いてfuncBが実行される。(短絡評価) funcA( ) + funcB( ); funcAもfuncBも実行されるが、どちらが先に実行されるかは処理系依存=言語仕様としてきまっていない(不定) array[ value++ ] = array[ value ]; value++による副作用が完了する以前にvalueを参照するため一切の動作が保障されない(未定義)
Cは型の構文がすきだけど、ほかは全部キライ。
(a = 3) これはAAでちょ (・∀・)
失せろKY屑
a=3 チンコ
C++ は型の構文も何もかも嫌い
>funcAが必ず先に実行される。funcAの戻り値が真なら続いてfuncBが実行される。(短絡評価) これも処理系によるんじゃなかった?
(短絡評価)ってことは、短絡評価がある処理系なんだろう
短絡評価はC/C++言語規格で決められてるよ。
975 :
仕様書無しさん :2008/01/22(火) 00:05:56
>>933 ダミーループならよく使ってる。
while(1)
{
:
break;
:
}
は気持ち悪いから
do {
:
break;
:
}while(0);
を使う。
処理系、というと「C/C++のいう、処理系(C/C++のなかの、ヴァリエーション)」とおもうけど、 ひょっとしたら「Java処理系」「Perl処理系」「VB処理系」など各言語・処理系そのものを 比較しているのかもしれない(w
978 :
仕様書無しさん :2008/01/22(火) 00:18:52
>>977 gotoだとどこに飛ぶのか探さないといけないけど、
gotoさえ使わなければスコープの範囲内で収まる。
gotoの欠点は綴り間違いとかのエラーを検出できないこと。
スコープを抜けた場合スタックに積み残しになったりするのもやばいんだっけ。
ごくまれにifのブロックをbreakで抜けたくなる
980 :
仕様書無しさん :2008/01/22(火) 00:22:57
981 :
仕様書無しさん :2008/01/22(火) 00:24:26
単位変換のさい、いちいち cm = m * 100みたいなコードうってる、単位が明確でない ビット演算とか飛び交いすぎて、何を意味しているかわからない 重複コードがたくさん見つかる アサートがろくに使われていない、テスト処理がない コミットされたコードがコンパイル通らないことが多い 「この関数使って○○作っておいて」といわれるとその関数がうまく動かない
982 :
965 :2008/01/22(火) 00:33:56
しまった、C/C++関連スレだと思って言語指定しなかった。
>>965 はC/C++での話、他言語は知らんから必要なら自分で調べてくれ。
処理系定義はコンパイル環境ごとに違う。
たとえばVC/gcc/bcc、同じVCでもVC6とVS2008で違うかもしれない。
違ってても文句は言えない、言語仕様として決められていないから。
つーか関数化しちゃってreturnでいいよ。 ダミーループでもいいけど、ちゃんとコメント書いておけよな! みんながみんな正常な脳みそもってるわけじゃないんだぜ・・
>array[ value++ ] = array[ value ]; >value++による副作用が完了する以前にvalueを参照するため一切の動作が保障されない(未定義) すくなくともCなら =は右から評価 かつ []のほうが優先度が高いので、 まず、array[value]が評価、次に代入、最後にvalue++ は保証されてるんじゃないの?
C99でも?時間が止まってる人?
C99でこの部分が改善されたなんて話は聞いたことないんだが?
988 :
986 :2008/01/22(火) 02:48:33
よく見たら自分がアホだ。ちょっと吊ってくる。
吊ってくると言って本当に吊ってきた奴はいない
>>989 いまちんぽに紐結んだ
紐の先は咥えてる
次スレ立ててこようか?
立ててくる
スレ番飛びすぎ。
先頭に0xがついてなくても16進数と見なすのが、この板のデフォだろうw
基本的に副作用完了点と優先順位は関係無いんだよね? funcA() * funcB() + funcC; でfuncCが最後に実行されることが決まってるとかないだろうし
>>996 基本的にはないが、ある意味ではあるとも言える。
きちんとどうなるか理解できれば何も問題ない。
998 :
仕様書無しさん :2008/01/22(火) 16:59:53
>>996 関数が別スレッドを動かして優先度低いことやってたら結果として遅れても不思議ではないと思う。
999
華麗に1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。