まぁちょっとコレを見てくれ。
おもろいC++コードを貼るスレ
http://pc8.2ch.net/test/read.cgi/tech/1104494077/40-43 深夜に及ぶ必死のデバッグ中にこういうコードに行き当たった。
面倒だからって無茶杉。正直脱力した。もう帰ってフテ寝する。
経緯:
list<>が壊れる謎のバグ。まずいキャストでもあるんだろうと検索したら
あるはあるはstatic_cast<>でのダウンキャストが140箇所以上。
もちろんそこに指定のクラスがくる保証は同じクラス内はおろか先祖、子孫のクラスにもない。
仮に今は前提が正しくてもどっかオブジェクト構成の設計変えたらイキナリバグに変わる危険な設計。
そんな中デバッグのため順番にstatic_castをdynamic_castとtry-catchブロックに書き換えてるときに
上記のコードに遭遇した・・・。(ちなみにデバッガが使えない状況にあるからcerrへの出力が頼りだ。)
>889
まだ格闘してたのか。乙
>>887 [継続的インテグレーション]
一人目の子供が生まれたあとも、子作りに励むこと。
少子化が叫ばれる現代日本では、将来への希望に繋がる行為。
IT業界の親からは女の子が生まれることが多いといわれ、
どうしても男の子が欲しい親が、継続的インテグレーションを
続けることが多い。
>>889 漏「(例のコードを見せて)これは動かないですよ?」
EU「ああ、試しに書いてみただけ使ってない。」
漏「安心しました。」
ここで肝心のバグが解消してないにもかかわらず少しシアワセな気分になる漏れ。
漏「ところでstatic_castでdown castしてるところが140箇所くらいあるんですが・・・」
EU「全然問題ない。」
漏「でもせめてdynamic_castにしてチェックしません?」
EU「うーんでもgccのdynamic_castは問題があります。時々0になる。」
漏「そうなんですか?…でもそれstatic_castに変えても多分解決してませんよ?」
EU「…。」
漏「…。とりあえずもうちょっと原因は調べますけど。」
この段階で漏れ自身もJavaのキャストの仕様や参照のときの挙動と混同して
bad_cast例外が飛ぶとぼんやり思っていた。
ミーティング後NutsShellのC++言語リファレンスのdynamic_castの解説を参照する漏れ。
漏「………………きゃー!
だめー!やっぱstatic_castしちゃだめー!
dynamic_castでNULLポインタが返るのは型が違ってるー!危険!逃げてー!」
>>892 とても面白い。
めげないで続けて下さい
あー、中国人うぜぇ
バグの原因なんざ俺に聞いたって分かるわけねーだろうが
デバッガなりトレース文なり入れて調べろや
『コンパイラに聞け』って中国語でどう言うんだろ?
何やら色々方言が有るみたいだけど。
『聴、電文仲介者』で通じるかしら。
>888
なんだ。知らずに言葉使ってんのか。
聴、じゃなくて尋の方がw
>>895 電文仲介者ってw
電譜翻訳者の方が意味近くね?
>>898のリンク曰く
コンパイラ=編譯程序
デバッガ=調試器
ハンドルは日本語だと「てんば」
らしい。転把だと思うがウル覚え。
チェンジレバーはは「へんそくそうかん」だったような希ガス。
>902
落ち着けw
>902
お前こそ。
土曜の朝に休日出勤して、まだ帰れません。
客先にいる担当SEから待機の指示が出たままです。
騙されてるとしか思えません。
>>892 危険だが逃げちゃいかんよw
続編に期待!
漏「KMapですけど、絶対ダメってわけじゃないけど危ないですよ?」
EU「KMapあー、何かいい実装がありますか?」
漏「…といわれても私は全体が分かってるわけではないので…」
(漏れはまだ着任数ヶ月だし、単なる移植担当者だしなー。)
EU「あれはunionのようなものですね。何が入るかわからない。何かいい方法がありますか?」
漏「unionなら継承を使ってなんとかできることも多いですが…。
ルートのクラスへのポインタならvoid*と違ってまだしもダウン・キャストできますし…。」
EU「ンー、ちゃんとした実装は作るのが大変ですね。人手もないし。」
漏(…ってテンプレートと絡めて散々複雑な継承関係書いておいて何を今更…。)
「でももうちょっとちゃんとやっといた方が後々楽ですよ?」
EU「どうせ次期ハードウェアになったらXXXとかYYYとか1から皆作り直すのがいいと思いますね。
どうせ皆作り直さなければならない。」
漏「いやま、それはそうなんですけどね…。」
(しかし今、移植&デバッグしなきゃいけないのは今の版なんだがなー・・・。)
EU「コンパイラを全部作るのは大変ですね。
デバッグとか細かい対応作業に追われてちっとも肝心の研究が進まない!」
漏「…。」
(まぁ先にツールの下流ができててしわ寄せが全部上流にきてるのは気の毒だとは
思うけどな…。ただそのしわ寄せの結果を移植することになっちゃった身としては
なんともかんともなぁ…。ボスケテ…。)
>>907 もしかして「動けばいいや」的なソースを「まともに動く」プログラムとして移植するという作業?
ブルックスさんは「動けばいいや」と「まともに動く」プログラム工数は3倍違う
さらに統一的なI/Fときちんとしたドキュメント整備すると9倍変わってくるようなことを言ってたな。
(@see 人月の神話―狼人間を撃つ銀の弾はない)
あぁ確かに。
どっかで「プロトタイプを無理やりリリースしてデスマ」の話を読んだけど。共通点があるなぁ
>>908-909 まぁそういうのに近いけど、
リリースったって所詮「動けばいいや」版なんだけどね。
ただ移植したらハゲシック動かんので困っているわけで。
なんつーかEU氏の「動けばいいや」の基準があまりに低すぎる…。
今でこそ「Linuxなら(大体は)動く」になったけど
4ヶ月前は「彼のノートPCのLinuxでなら動く。」だったからなぁ。
実際C++の規格で「不定」とか「無保証」になってる部分に踏み込むコードが
気楽に出てくる…。
この方が いいねと奴が ぬかすから
毎週火曜は 仕変危険日
912 :
仕様書無しさん:2005/11/02(水) 02:40:29
俺は基本的に、保守・運用経験のある奴の言うことを
信じるようにしてる。そうすると、大概にして正解だよ。
一瞬、そんな馬鹿な。と思えるようなことも大概にして正解。
開発しかやったことない奴が業務運用を想定しても無理がある。
聞きかじった運用現場を想定して物事進めるやつが、たまに居るんだよ。
そいつの一言でやらなくて良いことをやらされたりね。
逆にやらないといけないことを無視しないといけなかったり。
913 :
仕様書無しさん:2005/11/02(水) 03:15:20
運用に限った話でもないけどな。
開発をしたことの無いSEさんが「この程度なら簡単ですよ、追加費用もいりません」なんて客に言ってると怖くてなw
ちょっと見ると簡単そうでも、よく見ると結構面倒な仕組みが
必要なことってあるからね。
>>892で使ってないとか言ってたlist<>ごと中身キャスト(参
>>889)、
コメント・アウトしたら呼び出してるメソッドがあって
コンパイル・エラー出てたりしたので怪しいとは思ったが
エラー出力して止まるようにして実際に走らせて見たら
思いっきり実際につかっとるやんけー!どういうことやねん!!
>明日が日本で作った彼女との結婚式で今日は休暇でいないEU
>>915 あんなコードを書く人のいうことを信じてはいけない。。。
それはともかく、今回の書き込みはなんかひがみっぽいぞ?w
>>915 幸い「list<>丸ごとキャスト」を使っている箇所は2箇所だけで、
そこでやってることはデータを別のコンテナにつらつらコピーしてるだけだったから
使わないで要素を個別にdynamic_cast&チェックする方法に書き換えたけどな。
(どうやらプリミティブ型へのポインタはそのリストに入らないらしいから。)
>>916 それは明日結婚祝いを幾らか持っていかねばならないことに今更気づいて欝ということだw
>917
空ののし袋持って行ってNullPointerExceptionですと言って……やりたいなぁ漏れなら……
本気で殴られそうです
テーブルの Join をカーソルぶん回してフルスキャンさせて実現させるだけなら
まだしも、そのループの中で Recordset を開閉するとわ…
そんなことだからたかだか数百件のレコードで検索に数分~十数分
かかるようになったとクレームがつくんじゃポムァ
今度派遣された会社、月初の書類作業多すぎだよ~
全部の書類書き終わるまで1.5日フルに掛かるたぁ、どういうことだよぉ。
こんな無意味なデータ、どんだけ集めても何の役にも立たないんじゃぁ・・・
のし袋があって空なら取り敢えずオブジェクトはあるような気もするな。
やっぱ袋ごと忘れて受付であわてるのがぬるぽというものであろう。
(普段の日常生活でこの種のぬるぽの多い私だが今回は無事であった。)
EU氏の結婚式がつつがなく終了した翌日の今日は、
デバッグのため怪しいキャストを探していた漏れの目に
ポインタを整数としてテキストに落として書き出し
(template<typename T> string encode(T*))
それを別の場所で整数として読んでポインタにキャストする
(template<typename T> T* decode(string&))
という関数定義を見つけて愕然とした。
…が検索の結果さすがにdecode()は
どこでも呼んでないようで安堵したり。
923 :
922:2005/11/04(金) 16:01:34
もっともオブジェクトをシリアライズするコードの一部ならその程度では驚かないが、
テキストには値も型情報はエンコードされてないし
エンコード関数はポインタ値だけにしか用意されていないから
シリアライズ用でもなさそう。ぶっちゃけかなり意図不明。
書いたときに眠かったか?w>書いたヒト
きんも~っ☆
ヴぉけかましたつもり?w
>>926 いや至極まじめに私が唯一知っている「きんもう」を挙げただけです。
>927
かっこいいな。
金○の毛? とか思ってしまった私って…orzオナゴナノニ
気持ち悪いって意味かな?と勝手に思ってるけど。
わからん単語はすぐぐぐる 基本だ
そして知らなくても良かった単語をまた一つ憶えるのだ。
よけいな事に脳みそを使ってしまった脱力感と敗北感を
>>928も味わうがいいさ!ハハハ!
>930
人間は無用な知識が増えることで快感を感じることができる唯一の動物である(I.Azimov)
トリ~ビア~~~~
生きていくうえでは全く必要のない無駄なこのスレにようこそ
生きていく上で全く必要のない無駄なものをこのスレに落として進んでいって下さい
絶対領域
プライド・・・・かなぁ > 生きていくうえでまったく必要ないもの
人間はパンのみで生きるわけじゃないぞ。
人間じゃなくなっても生きたいならプライドはいらんかもしれんが。
変換キーとか
無変換キーとか
Windowsキーとか
>938
WindowsキーはMetaに割り当てればよいぢゃないか。
変換キー、Windowsキーは必須!なくさないでください。
あ、無変換キーはなくしてもいいです。
俺のキーボードはWindowsキーは引っこ抜いてある。
Windows + E とか、Windows + M とか便利だと思うんだが...
Windows + R
普通はSuperキーやHyperキーとして割り当てるだろ。
なんでトリビアスレになってんだw
Windowsキーのないキーボードを買えばいいぢゃない
RealForce106とか
HHKとか
職場のキーボードを交換させて下さい。
身体になじんだものを使いたいです。
>>949 自分で購入して持ち込めば良いのでは。
記憶媒体じゃないんだから大丈夫でしょ。
職場で引かれる事確実だな
俺、自分でキーボード買ってきて、Thinkpadにつないで使ってる・・・
>>951 ASCII配列キーボード以外でプログラム書く気にならんとです
>956
まず「EU」って何か教えてくれ。
>957
欧州連合
漆原英二さんの事だよ
963 :
950:2005/11/08(火) 00:12:24
梅?
…は咲いたか桜はまだかいな?つか、紅葉もまだだなw
場所によっては紅葉もあるだろw
ここ数日あったかいな。
つか、職場は汗ばむほど暑いです…。
もう次スレが・・・( ̄▽ ̄;)!
マ板の次スレ担当は980ぢゃなかったのか?
まぁいいけどね。
数値と数字は違う概念だという事を、いくら説明しても理解してもらえません・・・
それは確かにナニだが、
改めてそれが必要となるシチュエーションってどんなん?
>>968
BCDとか文字列配列に数字格納とかじゃないの?
まさにそれです・・・ orz
データの内部表現というものを一から丁寧に説明すれば
中学生でも理解出来るはず
>>968 相手は位取り記数法がそもそもちゃんと理解できてないかもな。
2進数とか16進数とかも怪しいのか?
>>972 コンピュータに縁のない怒素人には難しいのかもね。
一般業務で数字と数値を区別する機会なんかないわけだから。
>968
一・二・三
1・2・3
I・II・III
見た目、すなわち「字」は違うけど意味する「値」は一緒ですよね?
とか言ってみては。
>>968 ・・・ごめんなさい。俺も一応理解してたつもりだけど実は理解できてなかった人間ですorz
俺みたいなド素人がこんな事言うのもなんなんですが、今はプログラミングの中でそんな問題に
なってるんですか?
もしそうなら数値は計算に使えるもの、数字は計算には使えず、表示に使うもの、って感じで
とりあえず教えてみてあげてみてはどうでしょうか?
俺は先輩にそう教えてもらって暫くして「なるほど、そう言う事か」って理解できたっす
ああ、昔の俺はそうだったな...
int a = (int)"30";
printf("%d\n", a);
何で30と表示されないんだろうと小一時間考えた末、コンパイラのバグという結論に達した
あのころは若かった...
parlとかawkとかそのへんがきちんとしてなくて気持ち悪かった
>>977 >コンパイラのバグという結論に達した
うひゃーw
だがしかし、近い人はマ板やム板に時々出てくるね。
>>976 数字は表示もそうだけど、入力も忘れないでほしいところ。
あわせて入出力。人間の利便性のためにコンピュータは「数字」を扱う必要がある。
というかこの2つの違いを意識してないと、
ユーザの入力した文字列をString型のままModelクラスに渡したり、
DBから取り出した値に速攻でコンマ編集かけたり。
おまいら後で四則演算しなきゃいの分かってますかorz
その人曰く、こんぷーたーは2進数の「数字」で演算しているそうです。
じゃあ人間も、脳内は10進数の「数字」で演算しているんでつね・・・
数学は数字も含め、
所詮記号を使ったゲームに過ぎないといいたいわけだよ!その人は!!www
丁度そんなソースに対面したので。
private int getXXX(int val) {
StringBuffer buf = new StringBuffer();
// 10進値を16進値に変換し、文字列に変換
buf.append(Integer.toHexString(val));
buf.insert(0, "0x");
return Integer.decode(buf.toString())
}
('A`)エー
>>981 > じゃあ人間も、脳内は10進数の「数字」で演算しているんでつね・・・
この辺はものすごく専門的な話になってきそうな気がする、
とNHKの地球ドラマチックを見終わった頭で言ってみる。
人間の頭の中で計算するときって、たぶん10進数に縛られた思考してるんじゃなかろうか。
#埋めがてらスレ違い話スマソ
>>983 泣ける
>983
全クラスが泣いた
>>984 >10進数に縛られた思考してる
じゃあインド人は、20進数で思考できるのか。
>>984 計算ということを「判断」と定義すると、
そもそも、人間はノイマン型のアーキテクチャではないし、
同一の入力を行っても同一の出力を行うとは限らない。
子供の頃にそろばんやってて暗算なんかもあったんだけど、
あの頃は頭の中にそろばんがあってその珠を動かすイメージで
計算してたような気がする。今はもう出来ないけど。
989 :
仕様書無しさん:2005/11/10(木) 02:44:35
>>988 中学生のころ、テレビで自閉症の子供が瞬間的に計算しているのを見て
自分にも出来ないかと思い、練習していたら三次連立方程式を見た瞬間に
計算できるようになった。あんまりやると危ないかなあと思って
それ以来やらなくなったけど、今でも二次方程式くらいだと、
紙で計算するより脳内でやった方が速くて正確だったりする。
実際使う機会なんてほとんどないけど。
他にもグラフで計算したり、多角形を使ったり、数直線を使ったりと、
いろんな暗算法を思いついては実行する、変な中学生だったなあ。
(´-`).。oO(
>>981 のどこがおかしいんだろ?)
>990
× >変な中学生だったなあ。
○ >中学生のころから変だったなぁ。
>>990 別に趣味の問題だからな。変ってことはあるまい。
(´-`).。oO(脳内10進「数字」演算マシーンが、2進数や16進数の演算を理解するのだろうか?)
最近右左を間違えるようになった、以前は考えずに反応して間違えなかったのに、今は
少し考えないと時々逆になってしまう。
二桁の足し算とかもぱっと見た瞬間に答えが出なくなってちゃんと計算しないとできなくなった。
30代にして老化がかなり進んでるようだ・・・。
10を「ちょうどいい数だ」と思うなら、10進数に縛られた思考って言えないかな。
あ、でも0~9の文字が無くても「10進数」の考え方は存在できるのか。
おっと、マなら256とか言うべきか。
何進数でも10はちょうどよくね?
>>990 三次連立方程式は変数消去して三次式の解の公式をもってこないと
解けないんで、有理数レベルで計算できるならすごいと思うが
二次方程式は解の公式が覚えやすいから係数が複素数でもないかぎり解ける気がする…
>998
詳しいことは知らんが気がつけば999だ。
↓ほれっ
1000 :
ログ収集家(34歳) ◆ngfbXCLEt2 :2005/11/10(木) 21:34:32
せん!
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。