この会社辞めようと思ったソースコード#11

このエントリーをはてなブックマークに追加
1仕様書無しさん
この会社辞めようと思ったソースコード。
プログラマとして幻滅するソースコード。
プログラマを悩ませるソースコード。
をつらつらと綴っていって頂戴。

ちなみにここは質問スレじゃないので
技術的な質問がしたいならム板に逝って。
2仕様書無しさん:2005/04/16(土) 16:16:31
2げと
3仕様書無しさん:2005/04/16(土) 16:17:04
前スレ

この会社辞めようと思ったソースコード#10
http://pc8.2ch.net/test/read.cgi/prog/1097676086/l50
4仕様書無しさん:2005/04/16(土) 16:54:57
ぬる
5仕様書無しさん:2005/04/16(土) 17:25:16
乙>1
6仕様書無しさん:2005/04/16(土) 17:44:16
ぬるぽぉおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおお
7仕様書無しさん:2005/04/16(土) 17:44:37
0xは?
8仕様書無しさん:2005/04/16(土) 18:33:01
>7
そう言えば前スレにも0xもなけりゃ&hもないな。
まぁ>1乙
91:2005/04/16(土) 19:57:42
前スレどころか過去スレ全部 #n だったと思う。
ぐちスレとかと勘違いしてない?>7
10仕様書無しさん:2005/04/16(土) 21:21:46
111:2005/04/16(土) 22:31:30
>10

ありがとん。ノシ
dat落ち云々が分かんなかったんでさぼりました(*'▽'*)エヘッ
12仕様書無しさん:2005/04/16(土) 22:59:44
まあ#11はいいんじゃね?
おれは#19のあとのスレ立てに要注目かと。
13仕様書無しさん:2005/04/18(月) 10:13:20
static void usage(void){
  char usage[] = USAGE;
  fprintf(stderr, "%s",usage);
  exit(1);
}


さて、まずどこからつっこんだものか
14仕様書無しさん:2005/04/18(月) 10:33:34
4 つくらいかな? つっこむべきところは。
15仕様書無しさん:2005/04/18(月) 16:37:53
本スレあげ
16仕様書無しさん:2005/04/18(月) 20:53:14
>13
関数内で配列をわざわざ宣言せずに、
直接fprintfの中にUSAGEをぶち込めよ

・・・ぐらいしかツッコミどころがわからんorz
ほかはどこがおかしいんだ?
17仕様書無しさん:2005/04/18(月) 20:58:47
voidなのにexit(1)してる
18仕様書無しさん:2005/04/18(月) 21:12:26
あとは
・fputsでええやんとか
・呼んだ先で不用意にexitするなとか(これは許容範囲か?)
19仕様書無しさん:2005/04/18(月) 21:27:56
>16
そして fprintf(stderr, USAGE) と書いてはまるクチだね、君は。
20仕様書無しさん:2005/04/18(月) 21:28:19
\nは?
21仕様書無しさん:2005/04/18(月) 21:32:15
考えていたことは大体、出たな。あと
なぜわざわざ関数にする?マクロで充分じゃないか
くらい
22仕様書無しさん:2005/04/18(月) 21:56:32
inline で(ry
23仕様書無しさん:2005/04/18(月) 21:56:33
うさ毛ってどこの毛ですか
2416:2005/04/18(月) 21:57:57
>19
いや直接ぶち込むってそういうんじゃなくって、
fprintf(stderr, "%s",USAGE);
とすることだったんだけど・・・

俺の書き方まずかったかな
25仕様書無しさん:2005/04/18(月) 22:01:16
usageが重複してるのがきもいと思った。
あと、fputsで良いのでは?も同意だが、辞めようと思うほどのことかね?

>>17
何で駄目なんだっけ?
26仕様書無しさん:2005/04/18(月) 22:04:16
>>20
USAGEに含まれてれば問題ないじゃん。
27仕様書無しさん:2005/04/18(月) 22:18:53
> char usage[] = USAGE;

なぜ配列なのかと
やるとしたら const char *usage だろ
28仕様書無しさん:2005/04/18(月) 23:20:24
>>25
ダメじゃないと思われ。たぶん、>>17 は ret(ry

>>19
> そして fprintf(stderr, USAGE) と書いてはまるクチだね、君は。
ん、どうはまるんです?最後にセミコロンがないってこと…?
29仕様書無しさん:2005/04/18(月) 23:36:08
>>28
#define USAGE "このプログラムは100%sprintf互換です。"
だったらどうなるかな。
30仕様書無しさん:2005/04/19(火) 00:14:02
というか、USAGEってどこにも定義されてないと思われ。
提示されたソースコードに含まれていない定数を勝手に想像するのはいかがなものかと。
31仕様書無しさん:2005/04/19(火) 01:11:20
きっと、こんなふうにオーバーランさせてるんだよ

#define USAGE "",*c;memcpy(c,CODE)
32仕様書無しさん:2005/04/19(火) 01:55:40
>>13
出てこい
どこがまずいかはっきり書け。
33仕様書無しさん:2005/04/19(火) 02:02:16
× USAGE
○ USAGI
34仕様書無しさん:2005/04/19(火) 02:16:55
>>14
上の口と、下の口と、菊と...に、尿道もか!?
35仕様書無しさん:2005/04/19(火) 07:08:49
つりでした
36仕様書無しさん:2005/04/19(火) 15:59:14
>>29
なるほろ。
と思いましたが、コンパイルで気付きますね。
37仕様書無しさん:2005/04/19(火) 19:08:13
>>36
試しにやってみたけど、手元のVC7.0ではスルーされた。
というか、「間違っててもコンパイラが教えてくれるからいいや」ってのは
かなり危険だし、そもそも問題の焦点がズレてるんじゃないかと思うが。
38仕様書無しさん:2005/04/19(火) 21:41:43
>36
そこはコンパイル時に気付か(け)ない。 printf系関数の弱点というかなんというか。
39仕様書無しさん:2005/04/19(火) 21:59:33
>>38
gccだとリテラルなフォーマット文字列に限り、
可変個引数部分との整合性チェックしてくれるんじゃなかった?

char *format = "%s";
printf( format );

みたいなことすると駄目だった気がするけど。
40仕様書無しさん:2005/04/19(火) 22:38:32
ライブラリ関数についてコンパイラが知っているというのは
本来期待できないことなので、見つけてくれたら御の字だけ
どそれを当てにしてはいけない。
41仕様書無しさん:2005/04/19(火) 22:55:06
GCC言語の場合は期待できるのです。
Cの場合は無理だな。
42仕様書無しさん:2005/04/19(火) 23:47:15
GCC言語?
43仕様書無しさん:2005/04/19(火) 23:52:23
GCCって'GNU Compiler Collection'の略ということにされてなかったっけ?
44仕様書無しさん:2005/04/20(水) 00:02:38
今はそう。
45仕様書無しさん:2005/04/20(水) 00:07:48
ガッデム!コンチクショー!コンパイラ
46仕様書無しさん:2005/04/20(水) 10:38:02
ゴキブリコイコイ
47仕様書無しさん:2005/04/20(水) 12:22:34
ゴスリングこのやろうこのやろう

あー、これはemacsかも。
48仕様書無しさん:2005/04/20(水) 12:41:01
0番地: DI
      LD SP,STACK ;<--これは0
      JP START
・・・
START: CALL INIRAM
      CALL INIIO
      DI
      LD  SP,STACK
      CAL INICC
      ・・・
この2度目のSP設定は何なんだ・・・
49仕様書無しさん:2005/04/21(木) 14:23:19
Set RJOB = DB2.OpenRecordset("hogehoge", dbOpenTable)
If RJOB.BOF And RJOB.EOF Then

たぶん用心深い人だったんだろうね
50仕様書無しさん:2005/04/22(金) 02:32:42
CALLしたあとでSPが保持されてないんじゃない?

てか、その言語なにかよくわからんけど
51仕様書無しさん:2005/04/22(金) 06:10:38
言語はZ80。リターンしたときSPが違ってたらふつうはここに戻ってこられないじゃん。
もともと0番地はSTARTへジャンプする命令だけが書いてあって、その後付け足した
際の修整ミスっぽいんですよね。でも今となっては呼んだ先がSPを壊して戻る可能性
が1%でもあると外せないです。
52仕様書無しさん:2005/04/22(金) 08:41:15
>>51
>リターンしたときSPが違ってたらふつうはここに戻ってこられないじゃん。
50は組み込み系の仕事をしたことがないと思われる。
SPがスタックポインタであるとか
関数が呼ばれた時どういう処理が行われているかとか
知らないんだと思う。
53仕様書無しさん:2005/04/22(金) 10:04:55
人のことはどうでもよいのだが

CALL から RET 使わずにもとの処理に
もどることもできる
54仕様書無しさん:2005/04/22(金) 12:25:40
ソフトウェアリセットで START: のとこに飛ぶケースがあるんじゃない?
まぁ、本当にただの無駄だったとしても、そんなに気にしなくてもいいような。
55仕様書無しさん:2005/04/24(日) 17:58:16
printf (" や ら ま い か");
56仕様書無しさん:2005/04/25(月) 13:37:58
>55
浜松人ハケーン
57仕様書無しさん:2005/04/26(火) 06:10:14
>CALL から RET 使わずにもとの処理に もどることもできる
このテクニックはタスク機能を提供するモニタなどで実際に使われるね。
反対にRETで「呼ばれた以外の所にジャンプする」テクもある。
ジャンプ (Reg)の機能を持つ機械語が無いとできないけど。
58仕様書無しさん:2005/04/26(火) 11:34:18
>57
「ジャンプ(Reg)」って、レジスタの示すアドレスにジャンプするってこと?
何の関係があるんだ…。
飛び先をスタックに積んでRETするだけだと思うんだが。

通常の戻り先アドレスにデータを配置して、サブルーチン側で
スタックを操作して、戻り位置をデータの直後に変更してからRET
というテクニックもあるね。
Z80なんかだと、幾つかの特定アドレスへのCALL命令を1byteで
記述できるから、1byteでも短縮するために、MSXなんかでは
BIOSがこの方法を採用してた。(うろおぼえ)
59仕様書無しさん:2005/04/26(火) 15:35:19
CALL命令の直後にパラメータを並べといて
パラメータの後ろにRETなんてのは良くやったよな
60仕様書無しさん:2005/04/26(火) 19:59:36
スタックにパラメータを積むってのも見たことある
何のメリットがあるのかは分からんけど
61仕様書無しさん:2005/04/26(火) 22:20:06
>>60
コンパイラのオブジェクト見てみろ。
それが普通だ。
62仕様書無しさん:2005/04/27(水) 00:01:07
つか、いわゆる関数呼び出しとはどうゆうものか知っとくように。
ここは一応プログラマ板だろ。
63仕様書無しさん:2005/04/27(水) 00:04:23
>>58
RSTですな。PC88ではあんまり用事がなかったような希ガス。
64仕様書無しさん:2005/04/27(水) 09:45:03
>>62
古株とかHW系やってないと意識しないよ。
register変数の取り扱いなんてコンパイラ依存だったりするし。
65仕様書無しさん:2005/04/27(水) 10:20:23
>64
ぅぃ?register変数てのは関数内部での話じゃないっけ@C言語
…いや、static関数なら別な可能性もあるのかな?忘れた。
register指定なんてしたことないからなぁ。
66仕様書無しさん:2005/04/27(水) 10:39:25
>>65
酔い覚ましてきた方がいいよ
67仕様書無しさん:2005/04/27(水) 11:25:41
>64
register変数の取り扱いなんてコンパイラ依存であることと
スタックにパラメータを積むことと何の関係が?
68仕様書無しさん:2005/04/27(水) 11:58:00
auto変数がスタック上に作られることと誤解しているんじゃないの?
69仕様書無しさん:2005/04/27(水) 12:14:34
とりあえずアセンブラ勉強しろ
そうすりゃ関数呼び出しくらいはわかる
>>64がなぜregister変数を出したかは知らんが・・・
70仕様書無しさん:2005/04/27(水) 17:03:34
古株とかHW系やってないと意識しないことの別の例としてregister変数持ち出したんでないの?
71仕様書無しさん:2005/04/27(水) 18:16:30
或いは、register 修飾した引数を想定してるとか。
72仕様書無しさん:2005/04/27(水) 20:03:40
int register;
int auto;

警告: 空の宣言です。

このコンパイラ、壊れてる!

73仕様書無しさん:2005/04/27(水) 20:52:35
int entry;
も欲しいところです。
74仕様書無しさん:2005/04/29(金) 09:48:55

printf(" と に か く や ら せ ろ ");
75仕様書無しさん:2005/04/29(金) 17:32:22
>>74
printf(" と に か く や せ ろ ");
76仕様書無しさん:2005/04/29(金) 19:02:55
puts( "お 断 り だ" );
77仕様書無しさん:2005/04/29(金) 22:17:50
puts( "お と こ わ り だ" );
78仕様書無しさん:2005/04/29(金) 22:21:05
>>73
あー、entryもか。実際には見たことないけど、何だっけ、これ?
歴史的事情による古語?
79仕様書無しさん:2005/04/29(金) 22:23:57
>>71
引数にregisterをつけたとして、その情報を活用できる
コンパイラ実装というのは実際にありえるのか?
# つか、ねえよな。
80仕様書無しさん:2005/04/29(金) 22:36:51
>79
現存するかはぁゃιぃがあり得ないとも言い切れないのでは。
いや、実例も知らないしコンパイラ作れないけど漏れ
81仕様書無しさん:2005/04/30(土) 00:31:48
entryはK&R初版時代には予約語だったはず。結局具体的な意味を与えら
ないままANSI Cでは予約語ではなくなった。K&R第二版ならそのへんのこ
とが書いてあったと思う。
82仕様書無しさん:2005/04/30(土) 01:11:10
第二版には「entryは、もはや予約語ではない」と書いてあるぞ。
83仕様書無しさん:2005/04/30(土) 08:11:00
第2版はANSICだからね。81が言ってるのもそういうことでしょ。

84仕様書無しさん:2005/04/30(土) 17:09:26
グローバル変数どころか、非表示のテキストボックスで値を保持している前任者を
頃してもいいですか?
85仕様書無しさん:2005/04/30(土) 17:32:02
>84
CEditViewの文字列をCWndのウインドウタイトルに持たせている
MFCを先にヌッコロしてからにしてください。
86仕様書無しさん:2005/04/30(土) 18:19:49
>>84
なんか素敵な構造だな、それ。
87仕様書無しさん:2005/04/30(土) 19:15:13
>>84

ん?別に普通のテクニックだが。
88仕様書無しさん:2005/04/30(土) 19:25:13
>>87
( д) ゚ ゚
89仕様書無しさん:2005/04/30(土) 19:33:30
>>87

( ゚д゚)

(つд⊂)ゴシゴシ

(;゚д゚)

(つд⊂)ゴシゴシ
  _, ._
(;゚ Д゚)
90仕様書無しさん:2005/04/30(土) 20:15:57
スレ違いだけど
まだ自分がビット演算を知らない厨房だったとき、
代わりに素数の積でフラグを持たせていたことがあったな
普通1,2,4,8,16…のビット和で持つのを3,5,7,11,13…の積で変数に持たせる
>>84を見てふと思い出した
91仕様書無しさん:2005/04/30(土) 21:20:17
そんな全然違うこと無理矢理思いださんでも。
92仕様書無しさん:2005/04/30(土) 21:23:01
INT WINAPI WinMain(HINSTANCE hInsatnce ......

んっ?
93仕様書無しさん:2005/04/30(土) 21:37:23
ん?
94仕様書無しさん:2005/04/30(土) 22:37:52
>>88,89
おれは>>87じゃないけどさ、VBなんかだと、アプリケーション全体ではなくて、
ウインドウ単位で情報を保持しておきたい時なんかに良く使われてたのは事実だよ。

いまでもそうなのかは俺は知らないけど。
95仕様書無しさん:2005/04/30(土) 22:41:49
>>94

何を基準に「良く使われてた」と言う?
96仕様書無しさん:2005/04/30(土) 23:31:03
VBとかでウインドウ(フォーム)単位で情報保持する為だとしても、
非表示テキストボックスする必要性が分からないな。

普通に変数に格納しておけば良いだけじゃん・・・
97仕様書無しさん:2005/04/30(土) 23:56:37
>>92 ,>>93

ワロタwwwwww
98仕様書無しさん:2005/05/01(日) 00:30:36
これだからVBerは嫌われるんだよ
Web開発じゃねえんだからよ
99仕様書無しさん:2005/05/01(日) 00:50:25
配列のソートのため、非表示istboxを用意してSortメソッド呼ぶようなのが「VB的」と
言われていた時期があったのは確か。

textboxはわからないけど。
100仕様書無しさん:2005/05/01(日) 01:04:28
確かにとってもVB的ではある。
いい意味か悪い意味かはあえて申しますまい。
101仕様書無しさん:2005/05/01(日) 01:49:55
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| $data=~ s/(\W)/sprintf( "%%%02X",unpack('C',$1))/ge;

   ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ( ・∀・)  ∧ ∧ < Perlで16進か?
 (  ⊃ )  (゚Д゚;)  \____________
 ̄ ̄ ̄ ̄ ̄ (つ_つ__
 ̄ ̄ ̄日∇ ̄\| BIBLO |\
       ̄   =======  \
102仕様書無しさん:2005/05/01(日) 02:15:53
>101
Perlでバイナリデータをいじってどこが悪いんだよヽ(`Д´)ノ
売り飛ばし先が決まるまでの暇に任せてJScriptでBlowFishを実装しようと目論んだ漏れよりゃましだ。
(ちなみに「目論んだ」というだけあって未完だ_| ̄|○)
103仕様書無しさん:2005/05/01(日) 05:07:48
>>94
ウィンドウプロパティが使えなかった頃の話かな?それなら納得だ。
全否定的なこと書く人たち、Windowsをよく分かってないぞ。
104仕様書無しさん:2005/05/01(日) 10:11:01
口空けて笑っていいですか。
105仕様書無しさん:2005/05/01(日) 14:22:51
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| $data=~ s/(\W)/'%'.unpack('H2', $1)/ge;

   ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ( ・∀・)  ∧ ∧ < >101の改良版か…
 (  ⊃ )  (゚Д゚;)  \____________
 ̄ ̄ ̄ ̄ ̄ (つ_つ__
 ̄ ̄ ̄日∇ ̄\| BIBLO |\
       ̄   =======  \
106仕様書無しさん:2005/05/01(日) 16:04:39
>>101
つか、何をしようとしてるの、これ?
わからんけどPerlならもっと簡単(≠きれい)に書けるよな、きっと。
# そこが笑いどころなの?
107仕様書無しさん:2005/05/01(日) 17:02:35
>Windowsをよく分かってないぞ。
うぷぷぷ。
108仕様書無しさん:2005/05/01(日) 17:23:28
>>106
URLエンコードだろう。
109仕様書無しさん:2005/05/01(日) 18:38:24
>>107
吐きそうなら便所へ行ってくれ
110仕様書無しさん:2005/05/03(火) 16:53:44
printf(" そ ろ そ ろ  や ろ う か ? ");
111仕様書無しさん:2005/05/04(水) 01:58:57
漏れの前の会社でもVBで同様のやり方をしてるのを見たことあるが
それはそれでいいかと思てた
フォーム名も明示的に書くからどの情報を操作してるかわかりやすいし
単体のときは表示させて動的に値を書き換えられるから異常系のテストも
やりやすいし・・・
つか、実際何がどう悪くてどうするべきか教えてもらえるとありがたいな
今後VBをやるかどうかは別として・・・

長文スマソ
112仕様書無しさん:2005/05/04(水) 03:39:23
>>VB/隠しコントロール
CGIで<INPUT TYPE=HIDDEN>を使うような感覚なんだろうか。
113仕様書無しさん:2005/05/04(水) 21:38:03
>111
悪いとは言わないよ。
ただ、そこから出てこないでね。
後はVBから他への乗せ換え案件でそういうのがもう出て来ないのを祈るだけさ。
114仕様書無しさん:2005/05/04(水) 22:49:44
VB経験者はちゃんと隔離しなきゃいかんってことだな
115仕様書無しさん:2005/05/05(木) 03:19:45
>>111
上にあったListBoxなんかだと、自分でソート実装するよりは安全で手間いらずで、
まあいいと思う。

けどTextBoxとなるとロジック上のメリットもないし、ウィンドウある分だけ変数より
負荷かかりそうだし、悪意のあるユーザが非表示TextBoxにPostMessage
したら困るでしょ?

デバッグだって、TextBoxじゃなく変数使ってもVBならイミディエイトで値書き換え
られるしね。
116仕様書無しさん:2005/05/05(木) 13:02:40
VBでは他の言語に比べてソートのプログラム書くのが難しい、とかあるの?
117仕様書無しさん:2005/05/05(木) 13:23:43
ループ制御が貧弱だったりするけどね。 まぁgoto使えば同じ事出来るし。
それ以前に、すでにあるsortを自分で書くのはおかしいと思わんか?
118仕様書無しさん:2005/05/05(木) 13:26:54
>>117
え?
まさかループ処理から抜けるのにGOTO使わないと抜けられないと思ってる?
ちゃんと用意されてるよ?

つうか、知識も無いくせに、ループ制御が貧弱とかよく言えるよねw
119仕様書無しさん:2005/05/05(木) 13:53:09
exit for だろ。 つーかそれしか無いじゃん。
120仕様書無しさん:2005/05/05(木) 14:02:31
do-whileやwhileを抜けるためのexit doもある。
121仕様書無しさん:2005/05/05(木) 16:45:47
貧弱とまでは言わんけどcontinueに相当するものがない
122仕様書無しさん:2005/05/05(木) 17:34:14
そんなもの つかわなくても 書けるだろ
123仕様書無しさん:2005/05/05(木) 21:02:25
>>117
「すでにあるsort」っつーのがListBoxのソートのことなんだったら、
自分で書くのはおかしくないと思う。ライブラリと一緒にしちゃいかん。
124仕様書無しさん:2005/05/05(木) 22:00:20
「ListBoxに突っ込んでソート」はたしかに常套手段だったな
汚くてイヤだったが
125仕様書無しさん:2005/05/05(木) 22:29:28
汚かろうが邪道だろうが、得られるものと失われるものをよくよく考えた上で実装したのならそれで構わないはずではある。ではあるが。
126仕様書無しさん:2005/05/05(木) 23:50:13
VBやるとSTLが神に思えてくる。
127仕様書無しさん:2005/05/06(金) 11:44:12
>>122
> そんなもの つかわなくても 書けるだろ
「つかわなくても書けるから必要ない」が通用するのであれば,全ての高級言語は必要ない
128仕様書無しさん:2005/05/06(金) 12:18:54
>>127
川柳だろ
129仕様書無しさん:2005/05/06(金) 12:46:23
川柳だったのか

sortなぞ 自分で書けよ ばかやろう
130仕様書無しさん:2005/05/06(金) 13:01:14
コンティニー みんなでつかえば こわくない


131仕様書無しさん:2005/05/06(金) 13:32:32
それにつけても 金の欲しさよ
132127:2005/05/06(金) 13:56:30
> 川柳だろ
ここは五七五スレだったのかーーー!
133仕様書無しさん:2005/05/06(金) 14:49:34
ContinueはVB.NET2005でやっとつくな。
134仕様書無しさん:2005/05/06(金) 14:57:00
>132

川柳=五七五
五七五≠川柳
135仕様書無しさん:2005/05/06(金) 15:44:43
川柳 ⊂ 五七五
136仕様書無しさん:2005/05/06(金) 15:51:20
川柳 is a 五七五
137仕様書無しさん:2005/05/06(金) 15:56:40
abstract class 川柳 implements 五七五{}
138仕様書無しさん:2005/05/06(金) 16:01:02
interface 川柳 extends 短歌;

interface 短歌 {
String get上の句();
String get中野区();
String get下の句();
}
139仕様書無しさん:2005/05/06(金) 16:45:44
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  川柳!

   ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧       / ̄ ̄ ̄ ̄ ̄ ̄
  ( ・∀・)  |\|\< 五七ゴルァ!!
 (  ⊃ )  (;   )  \______
 ̄ 。__ ̄⊂_ \丿_
 ̄ |)・))3< ̄\|VAIO-Z|\
  占 ̄ ̄    =======  \

 ↑しまい忘れ
140仕様書無しさん:2005/05/06(金) 16:57:33
138 =~ s/川柳/狂歌/;
141仕様書無しさん:2005/05/06(金) 17:08:53
そりゃ辞めたくもなるわな
142仕様書無しさん:2005/05/06(金) 17:36:49
このスレの流れを見ていたら、ふとヤマログの、

  だからさあ セーブしろって 言ったじゃん

を思い出した。
143仕様書無しさん:2005/05/06(金) 18:06:12
川柳 extends 短歌 implements 狂歌、かなぁ。
などと無意味な考察。
144仕様書無しさん:2005/05/07(土) 03:38:42
このスレにパタリロ殿下が降臨された様子
145仕様書無しさん:2005/05/07(土) 04:18:22
動いていればいいじゃない
プログラムだもの

みつヲ
146仕様書無しさん:2005/05/07(土) 17:25:18
printf(" イ ッ パ ツ や ら せ ろ よ 、 な?");
147仕様書無しさん:2005/05/07(土) 17:28:33
ことわります
なにいわれても
ことわります
148仕様書無しさん:2005/05/07(土) 19:12:04
やりますよ
うちはなんでも
できますよ

   営業
149仕様書無しさん:2005/05/07(土) 20:06:34
分け入っても
分け入っても
バグの山

山頭火
150111:2005/05/07(土) 22:46:15
>>113 >>115
遅くなったけどレスありがと
まぁ確かに他の言語に移行するときにはやりづらいな
デバッグ面も納得

>悪意のあるユーザが非表示TextBoxにPostMessageしたら困るでしょ?
これはマジ気付かなかった 教えてくれてありがとー
151仕様書無しさん:2005/05/07(土) 22:53:23
>悪意のあるユーザが非表示TextBoxにPostMessageしたら困るでしょ?
もし、そんな手当たり次第にPostMessageするウィルスがあって、
実際に被害が出るのが少ないから発見されないでいるとしたら、
ユーザからクレームが来ても原因不明で、、、ガクガクブルブル
152仕様書無しさん:2005/05/08(日) 00:54:02
> 手当たり次第にPostMessageするウィルスがあって

ローカルシステムに侵入できたなら、
そんなまどろっこしいことしないと思うyo
153仕様書無しさん:2005/05/08(日) 18:09:25
>そんなまどろっこしいことしないと思うyo
いや、擬装方法としたらいい手かもしれん。
もしそうされたらおそらく、そのアプリに関係する原因の調査が行われるだろうから、
充分な時間稼ぎにはなりそうだ。
154仕様書無しさん:2005/05/09(月) 05:47:01
>悪意のあるユーザが非表示TextBoxにPostMessageしたら困るでしょ?
これで目から鱗っていっているやつは、
ゲームの改造等でよく使われているメモリエディタのことを知ったらどう思うんだろうか
155仕様書無しさん:2005/05/09(月) 23:47:32
教えてくれんね。
156111:2005/05/10(火) 01:31:55
>>154
>メモリエディタのことを知ったらどう思うんだろうか
それは知ってる 自分でも作ろうと思ったし

ただなぜか 非表示TextBoxにPostMessage は気付かなかった_| ̄|○
157仕様書無しさん:2005/05/19(木) 00:56:05
>148
りちぎだね
そうがんばると
あとこまる
158仕様書無しさん:2005/05/19(木) 01:08:44
>157
All Right!!
159MID:2005/05/19(木) 01:43:59
>158
kill
160仕様書無しさん:2005/05/20(金) 01:56:35

printf("もう我慢ならん やらせろ");
161仕様書無しさん:2005/05/20(金) 02:24:07
急速にスレの質が低下してまいりました
162仕様書無しさん:2005/05/20(金) 08:45:27
>161

最初からこんなものw
163仕様書無しさん:2005/05/20(金) 10:17:06
All Rights Reserved!!
164仕様書無しさん:2005/05/21(土) 01:38:24
hoge.a = hoge.a;

最初何やってんだか分からんかった。
なんでも、Setterの中で更新用のコードが動くからだそうで。
165仕様書無しさん:2005/05/21(土) 02:34:41
C言語で1関数12K Line、しかもメイン関数
166仕様書無しさん:2005/05/21(土) 03:06:30
All Rights Reversed!!
167仕様書無しさん:2005/05/21(土) 03:09:48
>>166
全ての権利を取り消してどうするんだよw
168仕様書無しさん:2005/05/23(月) 21:49:38
Copywrite 2005
169仕様書無しさん:2005/05/23(月) 22:52:27
Copirite 2005
170仕様書無しさん:2005/05/23(月) 23:05:26
Copy 205
171仕様書無しさん:2005/05/23(月) 23:22:41
Kopiiraito 2099
172仕様書無しさん:2005/05/24(火) 02:46:59
UwaWrite '05
173仕様書無しさん:2005/05/24(火) 18:24:47
コンボボックスで一覧にある物以外入力できない仕様で、
DropDownListにして一覧以外入力出来ないようにするのではなくて
DropDownでテキスト入力可にしてフォーカス外れた時に
今入力されてるテキストが一覧にあるテキストかどうかをチェックしてやがった。
無駄な努力しやがって。
174仕様書無しさん:2005/05/24(火) 19:10:10
>>173
デバッグ用の隠しコマンド仕込む時にたまにやるな。駄目?
175仕様書無しさん:2005/05/24(火) 19:57:47
>>174
たぶんだめ。
つか、わざわざコンボボックスでそんなことをする意味がわからん。
176仕様書無しさん:2005/05/24(火) 22:06:00
止めやしないけど
隠しコマンドならもっと他の方法で実装すればいいような気もする。

余計なバグを生むリスクを抱えてまではやらないかなあ…。
177仕様書無しさん:2005/05/24(火) 23:03:41
>174
iniファイル、レジストリの読み込み専用のキーでデバッグモード
ある操作でそれを読みに行くようにして起動中切り替え

>173
DropDownListを知らなかったというオチ?
178仕様書無しさん:2005/05/25(水) 05:28:19
>>172
(´д`;)ゥヮー
179仕様書無しさん:2005/05/25(水) 06:07:03
>>172
Writeがちゃんと書けてる時点で
本家より上
180仕様書無しさん:2005/05/26(木) 22:47:41
tyosakuken hyouji 2005
181仕様書無しさん:2005/05/26(木) 23:01:48
extern struct Foo *m;
182仕様書無しさん:2005/05/27(金) 10:55:22
printf(" なかなかヨカッタ またくるからな");
183仕様書無しさん:2005/05/27(金) 19:59:00
入社半年くらいに自分が作ったソースにこんなコメントがあった
while( fgets( buf, 1024, ncfile)){//(б・∀・)бゲッツ

10行くらい上を課長が修正してたけど見られたのだろうか不安だ
184仕様書無しさん:2005/05/27(金) 21:19:28
見ました
185VB:2005/06/05(日) 00:38:29
こんなようなの。本末転倒だよな。

For i = 1 To 10
Select Case
Case 1:
Case 2:
Case 3:
Case 4:
Case 5:
Case 6:
Case 7:
Case 8:
Case 9:
Case 10:
End Select
Next
186仕様書無しさん:2005/06/05(日) 00:42:05
switchの前後に処理があるかcaseにfall throughがあるなら
問題ないけど、それだけだと意味不明だな。
187仕様書無しさん:2005/06/05(日) 01:18:40
>185
Select文の変数がi以外ならいいのでは?
188仕様書無しさん:2005/06/05(日) 02:34:06
前後に処理はなかったし本当はこうだったかな。
× Select Case
○ Select Case i

確か、中では配列に対して処理をしていたはず。
きっと、配列か何かをループで処理することに拘るあまりに
生まれた糞コードなんじゃないかと思うのです。
189仕様書無しさん:2005/06/05(日) 03:08:08
>188
配列[i]の値を見て、ってことでなくて?
190仕様書無しさん:2005/06/05(日) 03:14:27
>>185
漏れは配列の要素数が変わる可能性があるならそんな感じに書くな
Toの値はUboundで求めるけど
191仕様書無しさん:2005/06/05(日) 10:43:48
>>185
1.
元々はSelect Caseの前に配列への共通処理があった
または想定されたのでそう書いた説


2.
hoge(0) = ...
hoge(1) = ...
....
と直に書くよりは、処理の記述漏れが少ないと思った説
(Select CaseならCase Elseで捕まえられる)


3.
やはり添字直書きするよりは、配列全体を処理してますよー
という意図が伝わりやすいと思った説


いずれにしても、その程度では会社辞めようとは思わないなあ
192仕様書無しさん:2005/06/05(日) 11:28:29
会社をやめようとは思わないけど、そいつとはもう一緒に仕事したくないかも。
193仕様書無しさん:2005/06/05(日) 13:36:08
>>185
あまりコメントする気になれないけど
俺はその種の記述方法が良いケースは知らん
194仕様書無しさん:2005/06/05(日) 14:02:24
>>173
>DropDownListにして一覧以外「入力出来ないようにする」
文脈からして「選択できないようにする」の間違いだと思うが、
要するに「テキスト入力は不可にする」ってことだよね?
リストの数によってはいちいちリストを展開&探す&選択より
テキスト入力したほうが早いし、そういう要望も多い。
まともな技術者ならLookupItem()を実装してるよ。
195仕様書無しさん:2005/06/05(日) 14:39:58
case の要素が多くなるなら直値はどうかと・・。
196仕様書無しさん:2005/06/05(日) 15:18:39
>hoge(0) = ...
>hoge(1) = ...
>....
>と直に書くよりは、処理の記述漏れが少ないと思った説

いったいどんな処理だ、想像できん(;_;)
197仕様書無しさん:2005/06/05(日) 15:47:17
>>196
こんなの想像して..(;_;)
hoge(0) = ...
hoge(1) = ...
hoge(1) = ...
hoge(3) = ...
198仕様書無しさん:2005/06/05(日) 18:31:26
>>197
それは創造できる。
199仕様書無しさん:2005/06/05(日) 19:11:56
>>198
じゃあこっち?

For i = 0 To 10
  Select Case i
  Case 0
    hoge(i) = ...
  Case 1
    hoge(i) = ...
  Case 1
    hoge(i) = ...
  Case 2
    hoge(i) = ...
  Case Else
    Debug.Print i
    Debug.Assert False
  End Select
Next
200仕様書無しさん:2005/06/05(日) 19:21:35
>>199

> Case 2
Case 3
と読み替えてくだされ(><)
201仕様書無しさん:2005/06/05(日) 21:49:23
VBで作ったプログラムがあった。
俺はリリースした段階でその仕事から外れ、
その後客からの仕様変更・機能追加依頼は外注に任せてたんだけど、
その後どんどん原因不明のバグ出るようになって、
また俺にメンテが回ってきた。
ソース見たら宣言せずに使われてる変数や、外部変数がてんこ盛りで
目を覆うような有様に成り果ててた。
明日からリファインの作業します・・・
202仕様書無しさん:2005/06/06(月) 14:55:31
>>201
最初にお前さんがリリースしたときに、
ソースコードの先頭にOption Explicitつけなかったお前が悪い。
203!201:2005/06/06(月) 15:53:31
>202
つけといたら外されたことがあるorz
「コンパイル通らないじゃないか、困るなあ」とまで言われた・・・
会社は辞められなかったが、部署は変えてもらったよ。
204201:2005/06/06(月) 21:50:23
>>202
うかつでした。
C上がりの俺には宣言しない変数を使うと言う事が思いつかなかったんでorz

詳しくソース見ていったら、
hogeって変数使って作業してるのに、仕様変更で加わった部分で
スペルミスしてhageって変数が発生して、そっちに値入れてしまってたり、
1つの外部変数にある場所では回数、ある場所では人数といった具合に
意味不明な使い回ししてるしorz
一回テストすれば確実に判明するバグが放置されてるしorz

このリファインの仕事、「動くべきものが動かない」との
客からのクレームで発生したので、会社に収入入ってこないんです。
3ヶ月ぐらい掛かる予定だけど、ボーナスに響くだろうな・・・
205仕様書無しさん:2005/06/06(月) 22:31:20
>3ヶ月ぐらい
そこで根性で一から作り直しですYo!、1カ月半で
206仕様書無しさん:2005/06/07(火) 10:13:31
外注使った香具師の責任の方が重いとは思うが。
機能は少ないけど問題ない状態で引き渡したんだろ?
201が外注の管理者ならダメぽ。
207仕様書無しさん:2005/06/07(火) 13:49:12
>>206
でもわからんぞ。
OptionExplicitも知らないで組んでたみたいだし、
自分は変数とかちゃんと宣言したつもりでも、スペルミスとかしてても気が付かず、
実際は自分で作った時からバグってたかもな。
208仕様書無しさん:2005/06/07(火) 14:24:30
>>204
客に納品前に自社でチェックしてないの?
209仕様書無しさん:2005/06/07(火) 15:02:32
>>207
同感
人のせいにばっかりしているが、201自身がちょっとアレなんだろう
210仕様書無しさん:2005/06/07(火) 19:42:05
少なくとも顧客から見て201の会社に責任があるのは間違いない事実だな。
害虫が動かん糞コードを生み出してる事に気付けない管理体制に問題がある。
それが201の責任かは、201の立場に拠る。
害虫の仕事をチェックすべき立場にいたのかどうかだな。
211仕様書無しさん:2005/06/07(火) 20:11:03
「つけといたら外されたことがある」で思い出したけど
パラメータ変えて同じような処理をするところがあって
//○○の場合の処理(○、×、□)
//△△の場合の処理(△、◎)
みたいなコメントつけておいたところがあったんよ。

そしたら、漏れの次に修正した人になぜか片方のコメントだけ消されてて(多分ミス)
やたら浮いてるコメントになってた。

気付いたのは半年後ぐらいにソースを見たときで
自分で「なんだこの中途半端なコメント?
漏れが書いた記憶があるがなんでこんなコメントを?」とか悩んでしまった。
212201:2005/06/07(火) 21:09:33
>>210
最終的には無論うちの会社の責任ですが・・・

外注は客先に常駐してPCに不慣れな客に操作指導しつつ、リアルタイムで
機能追加や仕様変更を受ける事になっていました。

プログラムをいじる時にはドキュメント書いて、うちの会社の品質管理グループの
レビュー受けるというルールを外注には事前に説明して、
ルールブックも渡したのに、「少しぐらいだから良いや」ぐらいに思って
その辺のルールぶっちぎった上、
客から「動きが怪しい」と、うちの社長に連絡が入って課長クラスが見に行った時に
「OSがおかしかったみたいでOS入れなおしたら直りましたよ」とごまかして
その場をしのぐような事をしやがってくれました。

>>207
俺は素で知りませんでしたが、確認したら最初の開発段階で他のメンバーが
入れてました。元のソースを見て記述されていたのを確認しています。
外注の香具師らが小手先改造の時に邪魔だからと削除したようです。
213仕様書無しさん:2005/06/07(火) 21:37:19
バグが取れなくて行き詰った時に、
「OSの調子が悪い」と言ってリカバリすると、
なぜかバグの原因が見つかるのは俺だけですか?
214仕様書無しさん:2005/06/07(火) 21:40:33
直面している問題を単に解決するだけの行為は、単なる対症療法に過ぎず、
本当の問題を看過してしまうという原因になりかねない。
風邪を引いて頭痛がするなら、休養して風邪を治すべきであり、
頭痛薬で頭痛を取り去るだけでは風邪は治らないのと同じだ。

ここで指摘したいのは「ソースコードやその場凌ぎや外注」は症状に過ぎない事を理解せず、
真の疾患は何であるかを考えずに他者を悪者にして済まそうとする
>>212の姿勢はどうよ?
ということである
215仕様書無しさん:2005/06/07(火) 22:02:49
>>214がいいことを言った。
216仕様書無しさん:2005/06/07(火) 22:18:54
>>214
よく読め:
>プログラムをいじる時にはドキュメント書いて、うちの会社の品質管理グループの
>レビュー受けるというルールを外注には事前に説明して、

>>214の落ち度は、Option Explicitとかを知らんかったくらいじゃないか。
どうして害虫を弁護するのか。
217仕様書無しさん:2005/06/07(火) 22:26:19
「レビューしていない=変更していないはず」なのに
外注が手を入れたバイナリをリリースしたって事?

それはそれで問題。
218仕様書無しさん:2005/06/07(火) 22:27:19
>216=214
自演乙

いくら品質管理の部署があったって、機能してなきゃいみねーよ
219仕様書無しさん:2005/06/07(火) 23:46:52
レスが付きまくるのは、みんな他人事じゃないからなんだろうな…

>216
客観的に見てどっちに非があろうと、他人を変えるより自分が変わる方が楽。
他人に対策させても裏切られる事は良くあるが、自分の方で対策するならば確実だしな。
今後再び糞害虫に当たる可能性もあるわけだし、対策はしておくに越した事は無い。

害虫にルールを守れと言うだけなら簡単だが、対策にはならない。
もっと害虫が守りやすいルールを考えるとか、レビュー無しで製品が通るのを水際で防ぐ方法を考えた方が建設的。
220仕様書無しさん:2005/06/08(水) 09:22:32
>>219みたいな修行僧が近くにいると楽かも。
もうどんどん対策して欲しいね。俺の分までw
221仕様書無しさん:2005/06/08(水) 11:14:36
わざわざスパゲッティな言い回しするなよ、
要するに「害虫なんか使うな」って言いたいんだろう?
222仕様書無しさん:2005/06/08(水) 11:45:28
外注管理工数と品質管理工数をもっとよこせ
だと思うが
223仕様書無しさん:2005/06/08(水) 16:15:23
仕事が出来ないことで社内でも問題になっていた先輩が失踪したため、
彼が抱えていた仕事のうち、半分程度が漏れに廻ってきた。
大した仕事をしてなかったのは知っていたため、「まあ仕方ねぇな」と思って引き取ったのだが、
ソースを見ると、脱力ポイントが次から次へと・・・。
中でも一番グッタリしたのがこれ。


SELECT CASE hoge
 CASE ELSE
  hoge = hoge
END SELECT


ナニガシタカッタンダアンタワ。
224仕様書無しさん:2005/06/08(水) 16:31:36
>>223
失踪する程なんだから、まともなコード書ける訳が無い。
寧ろ、まともなコード書いてた方が何故?という風になる。
225仕様書無しさん:2005/06/08(水) 16:42:20
VBやってるような底辺が何いってんだか
226仕様書無しさん:2005/06/08(水) 21:04:05
VBって意外に目に付くところにあったりするのな。
しらんかった。
227仕様書無しさん:2005/06/10(金) 01:02:28
おい>>199のコードを見てくれ
こいつをどう思う?
228仕様書無しさん:2005/06/11(土) 00:10:58
普通にクソ。
でもVBだからOK。
229仕様書無しさん:2005/06/11(土) 12:13:47
>228
不粋な奴めw
230仕様書無しさん:2005/06/11(土) 12:40:18
>>228
もっと詳しく解説してくださいな。
一応メリットもあるみたいだけど。
231仕様書無しさん:2005/06/12(日) 03:14:05
そんな昔のことよりも新しいことがいいなあ。
もうネタ切れなの?
232仕様書無しさん:2005/06/12(日) 10:29:55
よーし、じゃぁ、パパ、携帯電話にのってるソースコード公開しちゃうぞー
233仕様書無しさん:2005/06/12(日) 14:32:46
nullp
234仕様書無しさん:2005/06/13(月) 00:11:53
>>227
何に対し「どうよ?」と問うているのよ?
「Case 1」が二つある事か?
235仕様書無しさん:2005/06/13(月) 00:54:15
>>234
Case ElseでAssertしてるとこ

>>185だけ見るとなしだけど>>199見るとありのような気がしてきた
で、一般的にはどうなのか?と
236仕様書無しさん:2005/06/13(月) 10:49:27
>227としては、
「すごく・・・・クソコードです・・・・」という返答を期待した上のボケではなかったかと。
237仕様書無しさん:2005/06/13(月) 19:51:50
いまどき、

Dim hoge$
Dim moge%

辞めないで案件を放り投げた。
238仕様書無しさん:2005/06/13(月) 19:54:23
>>235
共通処理があるんならありでいいさ。
239仕様書無しさん:2005/06/13(月) 20:39:03
>>237が理解できない俺は負け組みか?
VB辺りかな
240仕様書無しさん:2005/06/13(月) 20:40:38
VBの古い文法だから知らなくていいよ。
241191:2005/06/13(月) 21:17:49
>>235
一般的な意見かは別にして>>199はネストが深くなるのが
嫌なのでナシ

>>197よりはタイプミスを見つけやすいけど、そんなのは
ステップ実行で確認すべきで、見た目を犠牲にするほど
のメリットはないと思う

>>237
辞めてよし!
242仕様書無しさん:2005/06/13(月) 21:26:50
懐かしいなぁ、A$、B%、SPRITE$……
ちうかSPRITE$って文字列型変数だったんや!! と気付いたときは一人カルチャーショックだった。
243仕様書無しさん:2005/06/13(月) 21:29:05
&
244仕様書無しさん:2005/06/13(月) 23:18:48
逆Perl?
245仕様書無しさん:2005/06/13(月) 23:45:37
ちゃうねん


行番号が必須やったころのBASICの名残やねん。
246仕様書無しさん:2005/06/14(火) 00:00:47
型宣言文字すらないソースと現在激闘中ですが何か_| ̄|○
247仕様書無しさん:2005/06/14(火) 00:09:01
>246
大丈夫。VBScriptなら問答無用で全部Variantだから……(つ´д`;)
248235:2005/06/14(火) 02:27:42
>>238>>241
case by caseということでok?
249仕様書無しさん:2005/06/14(火) 03:10:49
うまくオチをつけたつもりかころすぞ
250仕様書無しさん:2005/06/14(火) 03:59:46
>>247
そんなこといったらJavaScriptだってぜんぶvarだぞ。
251仕様書無しさん:2005/06/14(火) 10:58:32
まあ、Cでもdoubleを平気でintにたたきこむバカもいるわけだし
252仕様書無しさん:2005/06/14(火) 13:32:55
>251
コンパイルの段階でwarningが出るからいいよなあ、Cは・・・・
VBじゃスルーされちまうからな_| ̄|○
253仕様書無しさん:2005/06/14(火) 19:06:06
>>251
void (*foo)()
double a = (double) foo;

まじっすか?
関数ポインタがdoubleにキャストされてるよ!!!
254仕様書無しさん:2005/06/14(火) 20:02:42
>>251
そんなこといったらPerlなんか全部doubleだぞ。
255仕様書無しさん:2005/06/14(火) 20:06:10
>>253
ネタだよなあ?信じられん。。。
マジにマジなら、それはマジで辞めたくなるなあ。
256仕様書無しさん:2005/06/15(水) 00:21:58
0.5番地にジャンプしてみたい
257仕様書無しさん:2005/06/15(水) 00:49:35
ゼロ番地の後半4バイトと1番地の
ごめんいまのなし
258仕様書無しさん:2005/06/15(水) 01:43:05
壁の中にいる!
259仕様書無しさん:2005/06/15(水) 02:45:00
会社じゃないけど、なんだ?このクソ役に立たない記事は
小学生向けか?

64ビットプログラミングのポイント
http://www.itmedia.co.jp/enterprise/articles/0506/14/news003.html
260仕様書無しさん:2005/06/15(水) 06:36:28
>>259
初心者向け記事としてはそんなに特記するほど悪くはないんじゃないの。
なにしろもとはCマガみたいだし。
261仕様書無しさん:2005/06/15(水) 08:17:59
>>259
さすがになぁ…
役に立った、って思うのは0xffffffffの表現方法か?
油断していると思わずやっちゃうかも

でもなぁ…もしこれを使うなら、(~0)という表現を推奨するべきだろう
262仕様書無しさん:2005/06/15(水) 09:54:03
>>260
Enterprise内だから、たぶんプロ向け
263仕様書無しさん:2005/06/15(水) 10:22:53
うんこすぎる。Cというものを本当にわかっていれば問題にすらならないことばかりだ
264仕様書無しさん:2005/06/15(水) 10:25:52
いや、これは、バカが32で書いたコードをあなたが64に移植するはめになったとき、
こういうところに注意しなさいというメッセージに違いない。
265仕様書無しさん:2005/06/15(水) 11:32:05
実行例(実行結果?)の
'data model = ' が 
'data nodel = ' に見えるのは俺の目が悪いのか?
#スマン。あーコマカイ。そんな事どうでもイイじゃないか
266仕様書無しさん:2005/06/15(水) 13:07:57
| List3 間違ったprintf関数の使い方
| long value_l;
| ...
| printf("%d\n"), value_l);
うわ、確かに間違ってる。

>>264
| もちろん、32ビット環境でプログラムを書いたことのないプログラマにも有用な情報です。
らしいので、16bit 環境の人 (…ヴビ?) にもやさしい記事。
267仕様書無しさん:2005/06/15(水) 13:08:57
つまり、「初心忘るるべからず」ってことだな
268仕様書無しさん:2005/06/15(水) 15:56:45
>>254
んなこたあない
269仕様書無しさん:2005/06/16(木) 00:21:01
漏れはprintf書式の %ld を %d と書きそうですよ
270仕様書無しさん:2005/06/16(木) 19:17:15
>267
俺は「32bit環境も64bit環境も大差ないよ」というメッセージだと受け取った。
271仕様書無しさん:2005/06/16(木) 20:18:09
>>64ビット環境
今からきっちりやるなら、longに64ビットを期待するより、int64_tを使えよ。
272仕様書無しさん:2005/06/17(金) 00:26:18
long long
じゃねーの
273仕様書無しさん:2005/06/17(金) 00:33:26
long long ago
274仕様書無しさん:2005/06/17(金) 00:37:56
int64_t ........
ププ
275仕様書無しさん:2005/06/17(金) 01:03:02
1メソッドが1000行オーバー。
似た業務が増えるたびにこのでかいメソッドを
同じソースにコピペしてちょっろと変更。
これを3回繰り返したため、このソースは5000行突破した。

ちなみにjavaだorz
276仕様書無しさん:2005/06/17(金) 02:37:03
え、リファクタリングじゃん
インライン化
277仕様書無しさん:2005/06/17(金) 23:10:32
>274 はC99を知らないと見た。
278仕様書無しさん:2005/06/18(土) 07:52:11
for(i=0;i==sizeof(hoge)/sizeof(char)&&i==10;i++)

ちなみに
hoge char型の配列
直値のi=10 上の配列の数。

そして、この配列の数は共通ヘッダで#defineが切られている。
279278:2005/06/18(土) 07:53:36
あ、書き忘れたけど、Bugの原因になってたコード。
280仕様書無しさん:2005/06/18(土) 08:09:31
>>275
1000行に及ぶ、巨大なPL/SQLのFUNCTION・・・
こいつのバグを直すために、俺は・・・俺は・・・っ_T)
281仕様書無しさん:2005/06/18(土) 14:29:50
半年前に自分が書いたコードを見て
会社辞めたくなった。。。。orz
282仕様書無しさん:2005/06/18(土) 15:01:16
>>281
それは自分の成長を感じるところ。
283仕様書無しさん:2005/06/18(土) 18:20:08
>>281
気持ちは、わからんでもない。
つーより、ソースが糞すぎて全部無かった事にしたくなる。
284仕様書無しさん:2005/06/18(土) 18:36:04
0x0fa5
この意味わかりますか?
見当違いの質問をしていたらすいません__
285仕様書無しさん:2005/06/18(土) 19:44:00
16進数で0FA5、10進で4005。
あるいはA50F(42255)をバイトオーダーを逆にして書いた可能性も。

数値の意味は知らん。
仕様かソース見ないと分かんないよ。
286仕様書無しさん:2005/06/18(土) 20:27:24
ソース見て意味不明ならクソソースだ。
287仕様書無しさん:2005/06/18(土) 22:46:06
>>284
ここで訊くことが見当違いだと気付けよ。
288仕様書無しさん:2005/06/18(土) 22:48:58
0000111110100101ってことじゃないの。
289仕様書無しさん:2005/06/18(土) 22:51:29
とりあえずx86のマシン語ではなさそうだ。
290仕様書無しさん:2005/06/19(日) 03:53:16
0F RRC、 A5 ANA L、 8085なら。
291仕様書無しさん:2005/06/19(日) 12:11:45
「既存のソースを削除する事は禁止」のプロジェクトに入ってしまった。
鬱だ。
292仕様書無しさん:2005/06/19(日) 12:35:49
>>291
削除ではなく修正です。
と言い張れ。
293仕様書無しさん:2005/06/19(日) 13:28:46
>>292
修正の場合も既存部分をコメントアウトして、その下に書き足さんといかんのです。

//2005/6/18 hiroyuki: 引数を変更
//result = func(value);
result = func(value2);

テスト用に一時的なチェック用関数の挿入と解除を繰り返した場所なんかは
もうアフォかと。

//target_valueの値をチェックする場合はここで関数を呼び出す
//result = test(target_value);
//result = test(target_value);
//result = test(target_value);
//result = test(target_value);
result = test(target_value);
294仕様書無しさん:2005/06/19(日) 15:27:41
>>293
繰り返すのがわかってるんなら、if (debug) みたいので制御しろよ。
295仕様書無しさん:2005/06/19(日) 15:40:24
>294
それじゃ結局
//debug = 1;
//debug = 0;
//debug = 1;
//debug = 0;
になるんでね?
コンパイルオプションの方でプリプロセッサ定義するとかすりゃいいのか。
コンパイル時間が凄いことになりそうだが。
296仕様書無しさん:2005/06/19(日) 15:44:09
なぜそんなアフォなルールを変えようと動かないのか?
297仕様書無しさん:2005/06/19(日) 16:09:52
にやにや
298仕様書無しさん:2005/06/19(日) 16:11:37
何か変なのが紛れ込んでます?(・∀・)
299仕様書無しさん:2005/06/19(日) 16:12:31
変えたければ変えられるものばかりではない。
つか、それこそが%たいとる%なのでありんす。
300仕様書無しさん:2005/06/19(日) 21:06:16
かの軍曹の現場と同じクソルールか……と思ったがそれよりひどいのか。南無。
301仕様書無しさん:2005/06/19(日) 21:06:55
>>295
debugの入力元を設定ファイルにすればよくね?
設定ファイルはソースじゃないわけだし。
302仕様書無しさん:2005/06/19(日) 21:36:03
CVSからそういう感じのソースを吐くようなプログラムを書くというのはどうか(w
303仕様書無しさん:2005/06/20(月) 01:33:29
>>301
#ifdef _DEBUG
で切ってしまうのが、結局一番効率よくね?
304仕様書無しさん:2005/06/20(月) 03:52:46
自分が書いたものをチェックインして、
後日見たら勝手にコメントにされてたりとか改変されてるとか

一言断ってくれりゃいいんだけどな >>1-1000
305仕様書無しさん:2005/06/20(月) 07:16:27
あんたが「自分のもの」気分でいるのが悪い
or
あんたの会社のコード管理のやり方が悪い
306仕様書無しさん:2005/06/20(月) 10:07:44
>修正の場合も既存部分をコメントアウト
関数まるごとコメントアウトしとけ
っつーかソースまるごとバックアップでもいいかも
#if 0
前のソース
#endif
新しいソース
307仕様書無しさん:2005/06/20(月) 10:21:25
やっぱ変なの紛れ込んでますね(・∀・)
308仕様書無しさん:2005/06/20(月) 10:26:37
#include <stdio.h>

int main ( void ){
printf(" HELLO WORlD ! \n");
printf( "理系大卒で何も見ずに書けるのはこの程度...orz" );

return 0;
}
309仕様書無しさん:2005/06/20(月) 13:53:45
じゃぁおまいはディスプレイ無しでもなんでも書けるんだよな?
310仕様書無しさん:2005/06/20(月) 14:01:41
>printf(" HELLO WORlD ! \n");

突っ込むところはここ?
あと、もう一個のprintfにも\n入れようぜ
311仕様書無しさん:2005/06/20(月) 14:18:34
へろー をりど!
312仕様書無しさん:2005/06/20(月) 15:39:30
オルドシステムが正常に動作しません
313仕様書無しさん:2005/06/20(月) 15:52:13
>>312
ジンギスカン?
314仕様書無しさん:2005/06/20(月) 16:39:38
printf("!!猫w\n")
315仕様書無しさん:2005/06/20(月) 21:45:36
Windows用のプログラムでループカウンタとしてint型の変数使っていたら、
レビューで
「このカウンタは仕様上1000までしか値を持たない。
 よってintではなくshort型で十分である。
 この点だけでも設計者がメモリの使用にルーズで、
 また仕様の理解もいい加減である事が伺える」
とボロクソに言われたよ。
業界の大物とやらにさ。

#この程度コンパイル段階で最適化されて
メモリ使用量とか実質違いは無いんじゃなかったっけ?
316仕様書無しさん:2005/06/20(月) 21:54:33
>315
最適化はちとわからんが
32ビット環境ならintの方が良いこともあろうに、とおもゆ
……確か4バイト整数の方が2バイト整数よりもCPUに優しいと思ったが違ったかな(汗
317仕様書無しさん:2005/06/20(月) 22:15:08
>>316
コンパイラやコンパイルオプションによっても違うかもしれないけど、
大抵shortで宣言してもネイティブコードではintになってたりする。

つうかわざわざshortなんかでカウンタが指定されていたら、
その意味を深読みしちまうけどな。
318仕様書無しさん:2005/06/20(月) 22:20:15
>315
>よってintではなくshort型で十分である
ループカウンタをグローバル領域に確保するんですかね?
もちろん、組み込みなんかの場合は利いてくる場合もあるけど
普通はCPUに最適な型にする
だからintが正しいと思う

>業界の大物とやらにさ。
どういう人間?
319仕様書無しさん:2005/06/20(月) 22:22:17
レビューって要件の機能をやることじゃないのか?
つまりはそのレビューアは要件知らないからレビューの突っ込みどころ判らないから
粗探しでコードレビューしかできないわけだな。
さすが大物だな
320315:2005/06/20(月) 22:45:35
>>318 どういう人間?
80年代初めごろうちの社長が下っ端だった頃のスーパーSEで、
そのころ本も出してたんで、社長と同じ世代の人間の間では
今でも影響力があるんだそうだ。
この人がレビューしてオッケー出せば単価が倍になるんだと。
正直、メモリがKB単位しかないミニコンの世界から発想が一歩も出てない
(最適化だとか)ように思える。
321仕様書無しさん:2005/06/20(月) 23:09:36
>>320
消え去るべき老兵ですな。
つか、只の莫迦じゃ?大物ってのも、周りの褌担ぎがそう言ってるだけとか。
322仕様書無しさん:2005/06/20(月) 23:10:45
ある意味、スレ違い。
業界の大物 = この会社辞めようと思った腐れ上司

その大物が、shortで書き直したら、糞ソース、ケテーイ。
323仕様書無しさん:2005/06/20(月) 23:13:36
メモリ使用量って確かに組み込み系だとシビアなんだけどね

Windows用のプログラムだよな
むしろループが非効率化される弊害があるんじゃね?
後、そのソースをメンテする人が,なぜわざわざshortにしてんだ?ってぜったい非効率
324仕様書無しさん:2005/06/20(月) 23:17:53
80年代の8ビット16ビットCPUあたりの発想ならそれがベター解かもしれないが
今なら普通に処理系に合ったビット長(つーかintか)で宣言するのがCに限らず基本だと思う。VBですらそうだし。
つーか、その人にアライメントについて質問してみるとどの変の時代で記憶が止まってるのかわかるかも。

あと、315がどういう意味でそう言ってるのかはわからんが、
「最適化されるから細かいことは気にしなくてもいい」と考えてるのなら投げっぱなしすぎると思う。考え無さ杉。
「shortで書いてもintに最適化されるから弄るだけ無駄ですよ」ってならまぁOKかも。

intが最適と考えたのでintで書いてますって言うべきかと。
それが宗教論争でしかなくても、(間違っていても)論拠を考えてる人間の声は何も考えてない人間より大きくなりがちなので
たいていそういうところからプロジェクトに問題が起き始める。

「その点もごもっともなんですが処理速度の効率を考えて今回はintにしました」
とでも言っとけばスーパーSEの顔は立つから問題なし。
それでも直せ直せ言うようなら辞めるしかなw
325仕様書無しさん:2005/06/20(月) 23:21:48
>>323
ていうか、組み込み系でも今時intをshortにして最適化になるCPUなんてあるのか?
68系も86系もそんなん意味無いよな???

最近はアセンブラで組むなんてことないから漏れもわからんって言えばわからんのだが・・・。
326仕様書無しさん:2005/06/20(月) 23:31:23
コンパイラによっては、intで確保して、演算のたびにマスク処理している場合もあるしな
327仕様書無しさん:2005/06/20(月) 23:36:00
>325
>intをshortにして最適化
H8とか
16bitの組込用CPUは大抵そうじゃないかな
16bit、32bit演算のステート数が同じと言うことはないでしょ?
328仕様書無しさん:2005/06/20(月) 23:57:34
329仕様書無しさん:2005/06/21(火) 02:13:37
そもそもループカウンタの変数なんてほとんどの場合
レジスタが割り当てられるから、動作速度重視で int で
定義するべきじゃないの??
まあ、>>315 は、そんな汎用性も拡張性も考えない
業界の大物が羽振り利かせてる職場など、
さっさと逃げた方が良いというのは間違いなさそうだが…



330仕様書無しさん:2005/06/21(火) 02:19:53
その場で反論できなかった315もなかなか
331仕様書無しさん:2005/06/21(火) 07:27:57
>>329
きっと、そのループカウンタを宣言している関数内で、
再帰呼び出しを1万回くらいやってるに違いない
と想像してみるw
332仕様書無しさん:2005/06/21(火) 07:31:41
↑訂正
1万回じゃたいしたことないな
スタックオーバーフローさせるには、
1000万回くらいに必要か?
333仕様書無しさん:2005/06/21(火) 08:09:48
>>325
そのへんはの環境は intとshortはおなじでないか

334仕様書無しさん:2005/06/21(火) 09:05:54
68000のレジスタは32bit、外部バスでメモリが16bit幅で接続されてるとしたら、
short使う意味はあるよ。
335仕様書無しさん:2005/06/21(火) 09:32:16
>>315
> #この程度コンパイル段階で最適化されて
> メモリ使用量とか実質違いは無いんじゃなかったっけ?

最適化でオブジェクトのサイズが変わったらたまったもんじゃない。


それ以前に、ローカル変数なら大抵はスタックに取られるから、
メモリ使用量に違いは出ない事がほとんどだ。
336仕様書無しさん:2005/06/21(火) 10:23:04
321の言うとおり、去るべき老兵つか、
OOを受け入れない年寄りとかと同じレベルだな。

もう辞める気マンマンなら真っ向から蹴散らしてやればいいし
穏便にすますなら324氏のいうようにやればいいんでない?

いま、もっとも興味があるのはその大物氏の書いた書籍のタイトル(w
337仕様書無しさん:2005/06/21(火) 12:25:46
>>336
> いま、もっとも興味があるのはその大物氏の書いた書籍のタイトル(w

禿同
338仕様書無しさん:2005/06/21(火) 16:45:02
>>335
>それ以前に、ローカル変数なら大抵はスタックに取られるから、
>メモリ使用量に違いは出ない事がほとんどだ。
これはOK

>最適化でオブジェクトのサイズが変わったらたまったもんじゃない。
これは4バイト境界へのアラインメントとかで変わる可能性はあるんじゃないの?
構造体にPACKEDとかつけないと。
339335:2005/06/21(火) 20:59:56
>>338
int を使っていて short にすべき、
と言われた流れから、

>>315
> #この程度コンパイル段階で最適化されて
> メモリ使用量とか実質違いは無いんじゃなかったっけ?

との発言が、

 「最適化で、勝手にshortのサイズにしてくれんじゃないの?」

と読めてしまっただけだ。
だから、

 「intが勝手にshortのサイズに変えられたらたまったもんじゃない」

と言ったわけだ。
きっと、オレの誤解だろうな…。orz
340仕様書無しさん:2005/06/21(火) 21:05:35
レジスタに割り付いて、実体は消失とか。
341仕様書無しさん:2005/06/21(火) 21:17:29
>>339
そんな誤解するのはおまいぐらいだと思う
Bit幅が減少する最適化があるなんて誰が想像するんだよ
342仕様書無しさん:2005/06/21(火) 21:18:09
普通はレジスタに割り当てられるだろうね。
343仕様書無しさん:2005/06/21(火) 22:00:12
逆に昔のCコンパイラじゃそういう最適化ってされなかったの?
344仕様書無しさん:2005/06/21(火) 22:38:09
はい
cのソースつくられるアセンブラは、想像ができました。
345仕様書無しさん:2005/06/21(火) 22:46:15
最適化に妙な夢を持ちすぎダゾ。
定数ループとかでオーバーフローが発生しないことを読み切れるコンパイラなら
どちらかいいほうに最適化するだろうが、そうそううまくはやってくれないだろう。
オーバーフローを考慮すると、勝手に型を変えるわけにはいかんからね。
つか、C言語的にはそういうときには黙ってint。
346仕様書無しさん:2005/06/22(水) 00:21:24
>315
とりあえずコレでも見せておけば?
「ループカウンタ」で検索すれば2個目に見つかる。

ttp://dennou-k.gaia.h.kyoto-u.ac.jp/arch/comptech/cstyle/cstyle-ja.htm
一般的に言って、もしもワードのサイズや範囲が重要なら、「大きさの決まった」型をtypedefせよ。
大きなプログラムなら、中心となるヘッダファイルで、共有できるような幅の決まった型をtypedefすれば、
そのような型の変更やそれを使ったコードの発見が容易になる。 unsigned int 以外の符号なしの型は、
大いにコンパイラ依存である。
もし16ビットか32ビットで十分な大きさの単純なループカウンタを使うときは、
int を使えば、そのマシンにとって最も効率のよい(自然な)単位を得られる。
347仕様書無しさん:2005/06/22(水) 21:17:29
char a,b,c; 〜 a=b+c; が1)符号拡張b 2)符号拡張c 3)intで加算 4)下位
だけaに代入というコードになるお馬鹿コンパイラも実在する。(最適化ありでも)
規格通りだけどね。
348仕様書無しさん:2005/06/22(水) 23:09:00
た、たしかに結果としての動作は規格どおりだが、
内部でそんなことやってんのか。なんと言ってよいやら。
349仕様書無しさん:2005/06/23(木) 11:10:30
>>347
そりゃ、バイトデータの加算が出来ないプロセッサだってあるんだし
そうした方が速いプロセッサだってあっておかしくはない。
350仕様書無しさん:2005/06/23(木) 20:57:37
enumのサイズは表現できるサイズに丸められますな。

shortネタで:
PentiumPro以降は16bitサイズのデータだと
ペナルティがあるんじゃなかったっけ?
あとコードがちょっと膨れる(operand size prefix)よね

それでもshortが使いたいんだろうか・・・
351仕様書無しさん:2005/06/23(木) 22:46:36
プロジェクトの成功は、ソースコードではなく、社会学で決定するので、こんな感じかなー

・その場で大物に指摘する
 →間違い。目をつけられてとんでもないデスマに
・その場でスルーして、後で直す
 →正解。どうせ大物は、後で見ねぇって
・その会社をやめる
 →大正解。ただし、色々準備した後なら

とか思ったPM1年生
なんつーか、上にはアフォしかいないのか、と最近オモタ。
俺もそうだろうが。
352仕様書無しさん:2005/06/23(木) 23:19:13
階層型組織において、各個は無能レベルまで昇進する
353仕様書無しさん:2005/06/24(金) 00:48:03
一見高級なことを言ってるようだが、わけわからん!
354仕様書無しさん:2005/06/24(金) 01:02:48
key word は ピーターの法則
355仕様書無しさん:2005/06/24(金) 07:18:11
課長はやれるけど、部長ではダメダメという潜在能力を持った人間は、
課長の間はボロを出さないので、部長に昇進する。つまり、ダメ部長のできあがり。
降格すればいいが、そんなことはなかなかできるものじゃあない。
356仕様書無しさん:2005/06/24(金) 14:47:09
そうやって組織は腐って行くんだよな
357仕様書無しさん:2005/06/24(金) 21:11:32
>>350
C言語ではenum型のビット数は絶対にint。
あんたが言ってるのはC++言語の場合なので、念のため。
358仕様書無しさん:2005/06/25(土) 13:16:36
いい知れぬ不安
enum user_type_t {
    UNKNOWN = 0, MASS, ENTERPRISE
};
class User {
public:
    virtual int GetType() = 0;
};
class MassUser : public User {
public:
    int GetType() { return MASS; }
};
class EnterpriseUser : public User {
public:
    int GetType() { return ENTERPRISE; }
};

bool CheckUser( EnterpriseUser* eu ) {
    if( eu -> GetType() == MASS ) {
        CheckUser( (MassUser*) eu );
    }
    // : check処理
    // :
}
bool CheckUser( MassUser* mu ) {
    if( mu -> GetType() == ENTERPRISE ) {
        CheckUser( (EnterpriseUser*) mu );
    }
    // : check処理
    // :
}
359仕様書無しさん:2005/06/25(土) 17:02:02
えーっと
あれだ

この世界の人間の思考回路じゃないね
360仕様書無しさん:2005/06/25(土) 17:17:34
>>358
typeidとかdynamic_castをつかえよ、ってこと棚!!!
361仕様書無しさん:2005/06/25(土) 18:03:31
>>360 たいして変わらん。
362仕様書無しさん:2005/06/25(土) 21:48:25
>>358-361
C++の勉強用に書いたコードじゃないの?
363仕様書無しさん:2005/06/25(土) 22:17:44
単純にタイプコード使ってるだけかと思いきやMassとEnterpriseがねじれてるのか。

意味がわからないね。
364仕様書無しさん:2005/06/25(土) 22:55:26
「継承は多用しない方がいい」とかってのを字面だけ忠実にやってるんだったりしてな。
365仕様書無しさん:2005/06/26(日) 00:53:37
HOGE hoge:
memset(&hoge,0x00,sizeof(HOGE*));
onz
366仕様書無しさん:2005/06/26(日) 00:59:02
ナカーマ
HOGE* hoge = malloc(sizeof(HOGE*));
367365:2005/06/26(日) 01:04:37
続編

HOGE *hoge;
{
memset(hoge,0x00,sizeof(hoge));
368仕様書無しさん:2005/06/26(日) 03:27:54
えーっと
あれだ

この世界の人間の思考回路じゃないね
369仕様書無しさん:2005/06/26(日) 10:30:22
HOGE hoge;
memset(&hoge, sizeof(hoge), 0);
370365:2005/06/26(日) 12:21:54
>369
流石にそれはお目にかかった事ない
何って指摘すればいいのだ?その場合は
371仕様書無しさん:2005/06/26(日) 12:37:01
「bzeroの導入でも検討するか」
かな
372仕様書無しさん:2005/06/26(日) 13:58:05
えっと。俺は
0x00やその他諸々を単に0と書く習慣なんだけど
373仕様書無しさん:2005/06/26(日) 15:14:46
0x01や0x02なんかを0と書くのはまずい習慣だと思う。
374仕様書無しさん:2005/06/26(日) 15:26:22
>>367の笑うところを教えてくだちい
375仕様書無しさん:2005/06/26(日) 16:34:26
>>374 が笑えるかどうかは解らんが
ポインタを 0 にしたいのなら
  hoge = 0;
ポインタの指す領域を 0 にしたいのなら
  memset(hoge, 0, sizeof (hoge *));
素で解らんとか言ってるわけじゃないよね?
376仕様書無しさん:2005/06/26(日) 16:36:13
>>375
コンパイルエラーで助けてもらえる例。
377367:2005/06/26(日) 17:13:00
>>374
いや、笑い事じゃないんで、いやマジで、、、
378375:2005/06/26(日) 17:26:32
ぶ、死ね>俺
×sizeof (hoge *)
○sizeof (*hoge)
379仕様書無しさん:2005/06/26(日) 17:48:50
>>374
HOGE hoge[256];
本来ならこうなっててほしいんだろ

そうや、派生付クラスをmemsetで初期化してvfptrまで潰してて
vfptrなんてものがあること自体知らなくてはまってた記憶があるな
380仕様書無しさん:2005/06/26(日) 19:45:13
> vfptrまで潰してて

ナカーマ
381仕様書無しさん:2005/06/26(日) 23:19:20
>369
ごめん。それやったことある…
memsetって普段あまり使わんものでつい。
382仕様書無しさん:2005/06/27(月) 01:09:41
memsetで初期化しなきゃならんような構造体の使い方をしなければ良い
383仕様書無しさん:2005/06/27(月) 01:27:49
HOGE hoge={};

でいんじゃね、ポインタも正しくNULLになるし。
宣言時以外で初期化したいときは代入する。
384仕様書無しさん:2005/06/27(月) 12:46:37
というか、
memsetはstring.hで定義されてることからわかるように、
本来は文字列に文字を詰め込むための関数であって
オブジェクトをクリアするためのものではないのだが
385仕様書無しさん:2005/06/27(月) 14:09:32
「本来」とかにこだわる必要は無いんじゃないの。
386仕様書無しさん:2005/06/27(月) 16:32:56
オブジェクトにベタで0埋めって保証されてる?
っていうか、別にオブジェクトとも限定されてないような、構造体じゃね?
387仕様書無しさん:2005/06/27(月) 16:48:45
>>386
が何を言いたいのか、イマイチ分かりません。
388仕様書無しさん:2005/06/27(月) 17:58:05
>>382
やっぱり
VOID ZeroMemory(LPVOID,SIZE_T)
だよな。
389仕様書無しさん:2005/06/27(月) 20:35:15
>>386
PODじゃなきゃだめだろ。
390仕様書無しさん:2005/06/27(月) 20:50:02
>>382
そんなこといってるとWIN32APIを使えません。

そんなことよりもだ。
そろそろ%たいとる%をよろちくおながいしもす。
391仕様書無しさん:2005/06/27(月) 21:09:49
構造体の初期化は、memsetが基本だと思ってたんだけど違うのかな?
いちいち、かいてられねーよ、と。
392仕様書無しさん:2005/06/27(月) 21:50:22
構造体はmemsetでいいだろ。移植性が必要なときにclassのメモリを構造前提に
書いてはいけないだけで。
393仕様書無しさん:2005/06/27(月) 21:58:35
>>391
おれは、0埋めでいいなら>>383だな。
メンバ毎にバラバラの初期値が必要なら、初期化用の定数マクロ作っとく。
typedef struct {
  int hoge0;
  int hoge1;
  int hoge2;
  int hoge3;
} HOGE;
#define STHOGE_INITIALIZER { 0x29, 0x29, 0xbe, 0xef };
:
HOGE hoge = STHOGE_INITIALIZER;

C99なら宣言部でなくても
hoge = ( HOGE )STHOGE_INITIALIZER;
みたいに使えるし。

memsetは、これが使えんとき(F埋めとか)くらいしか使わんなぁ。
394仕様書無しさん:2005/06/27(月) 22:36:51
>>393
一行目同意。
それ以降は勘弁してくれ。
395仕様書無しさん:2005/06/27(月) 22:37:12
struct S {
std::vector<int> a;
};
とかだとだめだよ。memsetできるのはPODだけだ。
396393:2005/06/27(月) 23:34:55
>>394
駄目っすか。

ここ2年くらいの間にリリースしたコードで何ヶ所か使ってもうたよ。
どこかで見かけたらかわいがってやってね。
397仕様書無しさん:2005/06/28(火) 00:23:15
>>393
わざわざマクロにしなくてもいいじゃん。
初期化用にconstのグローバルオブジェクトを用意しとけば。
398仕様書無しさん:2005/06/28(火) 03:33:43
>>391
構造体の要素にdoubleがあったりしたらあまり良くないと思われ
399仕様書無しさん:2005/06/28(火) 09:09:28
IEEE754では全bitが0なら値は+0となる
準拠してない環境はステ
400仕様書無しさん:2005/06/28(火) 10:38:48
>>399 あまり良くないと思われ
401仕様書無しさん:2005/06/28(火) 17:39:04
>>383のコード書いたら、レビューのときに
「こんなコードねーよpgr」
と言われたことはある。
まぁ、ちゃんと初期化されてるなら、なんでもいーや、と最近思うようになった
402仕様書無しさん:2005/06/28(火) 18:22:34
printf(" や ら せ ろ  た の む か ら  " );
403仕様書無しさん:2005/06/28(火) 21:05:32
>>400
よくない理由は?ポリシーか?
でなければ非難するほど悪くもないと思われ。
404仕様書無しさん:2005/06/28(火) 21:07:01
>>401
初期化はされないですよ?staticなら別だけど。
405仕様書無しさん:2005/06/28(火) 21:09:37
>>383のコードの意味がよくわからない俺
406仕様書無しさん:2005/06/28(火) 21:44:14
>>405
プリミティブ型(int や double など)と同様に、構造体でも宣言と同時に初期化ができるんだよ。
その場合、 {} の中に構造体のメンバに代入したい値を記述する。
  struct Hoge { int a, b; };
という定義なら、
  struct Hoge h = {100, 200};
みたいに。

ここで、{} の中の値の個数がメンバの個数よりも少ない場合…
  struct Hoge h = {100};
上の初期化の例では b に対応する値が無いんだけど…この場合、
残りのメンバは 0 で初期化されるんです。

これを利用して、そもそも {} に何も入れなければ、h の全メンバが 0 初期化されるってワケ。
407仕様書無しさん:2005/06/28(火) 22:50:49
>>383,406
{} はC++の文法では許されるが、Cの文法では許されない。
{0} ならどちらの文法でも大丈夫だが、これはC++での空の構造体には使えない。
408仕様書無しさん:2005/06/28(火) 22:54:09
>>403
準拠してない環境はステることになるので、あまり良くないと思われ、ってことだろ。
409仕様書無しさん:2005/06/29(水) 00:02:23
char str[100] = "test"
だった場合、後ろの要素は0で埋まってるのが保障されるんだ
てっきり不定だと思ってた…
410仕様書無しさん:2005/06/29(水) 07:39:31
>>409
古いシステムでは不定だね
最近のシステムでは、セキュリティーの問題から
なんかの値に埋めることになってるよね
詳しい人help me
411仕様書無しさん:2005/06/29(水) 12:13:25
>>399
いちいち環境を調べるのもあれなんで、準拠度を評価するツールでも作ろうかな?
412仕様書無しさん:2005/06/29(水) 12:35:41
>>410
それって、>>383のコードもコンパイラがたまたまやってくれているだけ?
個人的には、仕様書の規定にないコードはあんまり使いたくないなぁ…
413仕様書無しさん:2005/06/29(水) 18:47:48
>>412
配列および構造体は、宣言時に各初期要素を{}でくくって初期化できる。
このとき、ANSI Cでは{}の中身が少なくとも1個は必要である。
要素の数が足りない場合は、足りない部分はすべて0を指定したものとしてコンパイルされる
(ビット0を埋めるわけではない。浮動小数点数も0.0となるし、ポインタは正しくヌルポインタとなる)。
要素の数が多い場合には、エラーとなる。
414仕様書無しさん:2005/06/30(木) 10:08:25
複数の条件A、B、C・・・があって、それぞれのONとOFFで複合的に
判断する、っちゅう処理があったんだが、if文が長くなるのが嫌だったんで
それぞれにビットを割り当てて、フラグ変数は一つでまかなうことにしたのね。

条件AがONだったら 0x01
条件BがONだったら 0x02
条件CがONだったら 0x04

みたいなので、ORで判別。。別に珍しくないよな、VBでもw
ところが、同じチームの奴に
「ビット操作なんてマニアックなことしないでくれ、デバッグがしづらい」
とクレームをつけられ、そいつのほうが立場が上だもんだから

Public Flg_A As Integer
Public Flg_B As Integer
Public Flg_C As Integer
   ・
   ・
   ・

てな具合に書き換えさせられた('A`)
これだから汎用機のCOBOLer上がりVB厨は・・・・_| ̄|○
415仕様書無しさん:2005/06/30(木) 10:23:38
ビットマニア…
orz
416仕様書無しさん:2005/06/30(木) 10:35:38
つ[決定表]
417仕様書無しさん:2005/06/30(木) 10:39:52
書き換えるにしても何故にInteger
Booleanじゃないのか…
418仕様書無しさん:2005/06/30(木) 10:41:31
>>417
関係無いが、場所によってはIntegerとBoolの使用を禁じている所がある。
疲れそうなので理由は聞かなかったが。
419仕様書無しさん:2005/06/30(木) 10:57:56
/* グローバル変数 */
HOGE01 hoge01;
HOGE02 hoge02;
HOGE03 hoge03;



HOGE15 hoge15;

grep 結果
hoge01は3箇所で見つかりました。
・・・
hoge15は3箇所で見つかりました。

使用しているところ見ていったら、値代入して、条件文で参照してるだけ。
しかも同一関数内で。
420仕様書無しさん:2005/06/30(木) 11:55:25
コボラーだな
421仕様書無しさん:2005/06/30(木) 22:33:58
>>414
VBなら
Flg_A のほうが自然だろ
というか
フラグがある時点で糞だということに気がつけよ
422仕様書無しさん:2005/06/30(木) 22:47:58
API呼び出しでもないのにVBでビット操作フラグの方がいいだろうなんて言う馬鹿がいる方が辞めたくなるもんだけどな。
423仕様書無しさん:2005/07/01(金) 10:33:13
ウチの営業所で一番 Java に詳しいと言われている、Java 歴 5 年目が書いた
プログラム。横に長くてすまん。実際はもっと長かった。

for (int i = 0; i < count; i++) {
if (i == 0) {
if (MyCompanyUtilClass.convertStr(condition).equals(A031205X_SomeFunctionConst.CD1205_CODE_INPUT_INVALID)) {
label = "<span class=\"invalid\">" + MyCompanyUtilClass.replaceStr(tABLE_HOGE_FUGA_LIST.getSelect_COLUMN_A(i)) + "</span>";
}
else {
label = MyCompanyUtilClass.replaceStr(tABLE_HOGE_FUGA_LIST.getSelect_COLUMN_A(i));
}
}
else {
if (MyCompanyUtilClass.convertStr(condition).equals(A031205X_SomeFunctionConst.CD1205_CODE_INPUT_INVALID)) {
label = label + "<br>"
+ "<span class=\"invalid\">" + MyCompanyUtilClass.replaceStr(tABLE_HOGE_FUGA_LIST.getSelect_COLUMN_A(i)) + "</span>";
}
else {
label = label + "<br>" + MyCompanyUtilClass.replaceStr(tABLE_HOGE_FUGA_LIST.getSelect_COLUMN_A(i));
}
}
}

似たようなコードがあちこちにある。こんなコードを書く奴にコード
レビューを受けたのか、俺は…… _| ̄|○

# 0x10 の 829 で愚痴ったのと同一人物です。
424423:2005/07/01(金) 10:34:18
う、字下げ失敗。吊って来ます。
425仕様書無しさん:2005/07/01(金) 11:38:56
半角スペースは省略されるから字下げするときは全角スペースで。
マとしては全角スペース入れるのはキモチワルイが・・・。
426仕様書無しさん:2005/07/01(金) 12:57:17
>>423
まず会社の命名規則がクソだと思うんですが
427仕様書無しさん:2005/07/01(金) 13:21:56
マ暦5年程度で一番詳しい営業所の方が問題
428仕様書無しさん:2005/07/01(金) 13:39:22
&nbsp; を使えば良いのでは
429仕様書無しさん:2005/07/01(金) 14:01:37
専ブラだと、空白やTABを&nbsp;に変換してくれる。便利。
(全部がそうなのかは知らん)
430仕様書無しさん:2005/07/01(金) 15:32:30
VBなんだけどさあ・・・・・

いま引き継いでいるソース、日付型データが全部文字列で宣言してやんの。

一万歩譲って「日付型」を使いたくない事情があったとしても、それなら
WIN32APIのSYSTEMTIME構造体とかだったらまだしも・・・・
なんで文字列なのさorz
431仕様書無しさん:2005/07/01(金) 15:38:44
制作者がDATE型の存在を知らんかったんだろ
直すのもめんどいから皆スルーとか
432仕様書無しさん:2005/07/01(金) 15:58:49
古い資産をずるずると使い回しているとそうなるね。
Date型ってVB5以降で実装された型だろ?VB4時代のソースをそのまま
使い回しているんじゃないかな。

CSV文字列を自動的に切り分けてくれるSplit関数という便利なもんも
あるんだが、これがVB6からしか使えないんで、俺の周りでも意外と
知らない人が多い。
433仕様書無しさん:2005/07/01(金) 16:29:51
invalidじゃないときにclass=""なSPANになるのがそんなに嫌か、とちょっとズレた感想を抱いた
434仕様書無しさん:2005/07/01(金) 16:34:21
>>423
ifの順番違うだろ、って話?
435仕様書無しさん:2005/07/01(金) 16:37:54
>>430
前提わからんのでなんとも言えんが
入力ソースが文字列で出力も文字列なら文字列でも別に良いと思うが。
少なくとも構造体にするにしてもAPI使わないんならわざわざAPI型にあわせる理由なんか無い。

なんか昨日もそんなのいたな、藻前414か?
436仕様書無しさん:2005/07/01(金) 16:38:28
>>434
初期化して+=にすればif文ひとつ要らないのと読み辛い。
437仕様書無しさん:2005/07/01(金) 17:02:32
>432
まぁCSV以外でも使えるけどな
438仕様書無しさん:2005/07/01(金) 18:02:13
>>430
日付を文字列で確保するのは普通に使われるよ。
古くからやっている人や怪しいマイナーDBを触ったことがある人ほどそういう
テクニック?を使う傾向があるかなぁ。

そういえばDatetime型って何バイトだっけ?
439仕様書無しさん:2005/07/01(金) 18:03:23
>434( == >414?)氏は、もしかして最近になってVBにシフトした
元C使いかなんかではなかろうかと推測してみるテスト。
440仕様書無しさん:2005/07/01(金) 18:04:03
×>434( == >414?)
○>430( == >414?)

スマソ
441仕様書無しさん:2005/07/01(金) 18:08:29
>>436
<br>はどうした?
442仕様書無しさん:2005/07/01(金) 21:25:26
>430
VBのDateとCurrencyは内部実装がDoubleだから
それが嫌で……ってんじゃないだろうなぁきっと……
# .netも↑みたくタコな実装だっけ?
443仕様書無しさん:2005/07/02(土) 20:52:35
おながいですからVB6ではByRefとByValを省略せず書いて
ちゃんと使い分けもしてください。
まだあまり関わったことのないけど
VB.netでは言語仕様が改善されてるから今後はましになってくるのかな?
444443:2005/07/02(土) 21:02:45
VBやってない人に補足。
6では関数の引数は何も付けなければ参照渡しのByRefが既定で
.netでは値渡しのByValが既定。
445仕様書無しさん:2005/07/03(日) 00:16:55
>>444
それは・・・互換性が全く無いじゃないか。
何故同じ言語名で呼ぶんだろう
446仕様書無しさん:2005/07/03(日) 01:03:21
>>443
自分で宣言書いてDLL呼び出しした事あるかないかで大きくずれるな、その辺の認識は。

>>445
ドトネトって要はC#がまずありきで予約語と一部文法をVB風に置き換えただけだし。
要はユーザー囲い込み。
VB一筋ですJavaだC#だの言われてもわからんす、って言ってる奴でも
知らない間にオブジェクト指向言語の世界に引き込まされる。
まぁ、選別用の篩でもあるってこった。
447仕様書無しさん:2005/07/03(日) 16:21:26
>443
VB.netなんて使わねえよ、夏 な漏れは
Declare以外の文脈ではByRefなんてLet並みの価値しか認めてないんだが……
ダメ(・∀・)?
448仕様書無しさん:2005/07/03(日) 17:10:12
>445
 VB .net と VC# .net との間でさえ、Boolean の互換が取れないんだから(w
449仕様書無しさん:2005/07/03(日) 18:07:30
VARIANT_BOOLじゃないんだ?
450仕様書無しさん:2005/07/03(日) 22:45:28
まあなにせあの会社のつくるもんだからなぁ
451仕様書無しさん:2005/07/04(月) 22:48:23
>>447
別に気にしなくてもあんまり問題になることは無いな。
API以外だと、普通は再帰関数書く時に初めて気にするんじゃなかろうか。

あと、なんとなく引数変数には代入しないってのが
なぜかVBユーザーの集合意識の中で統一取れてるような感覚はある。
(というか、引数に代入できるの知らないだけか?)
それですごい偶然にたまたま地雷を回避できてるみたいな。

漏れの周囲でもByRef気にしてなそうなプログラマ多いが、
それで大きな問題になったという話は今の所一度も聞いたこと無い。
あらためて考え直してみるとかなり不思議。
452仕様書無しさん:2005/07/05(火) 00:44:28
えーーーー
いつから ByRefになつたんですか
453仕様書無しさん:2005/07/05(火) 13:09:57
>>452
漏れの知る限りではVB2.0からの仕様だったが。
454仕様書無しさん:2005/07/05(火) 18:09:43
>>449
じゃないわけじゃないけどVBだとIntegerにキャストできてTrueが-1になる、ってことかと。
455仕様書無しさん:2005/07/05(火) 21:55:31
ByRef?なにそれ?
グローバル変数でデータ返す方が便利じゃん
456仕様書無しさん:2005/07/05(火) 22:18:17
グローバル変数をメソッドのByRef(というか宣言なし)引数として渡して
呼びだし先で書き換えると、検索だけでは見つからないので最狂
457仕様書無しさん:2005/07/05(火) 22:40:02
10カ所の参照渡しのうち、本当にデータ変更されてるのは1カ所でも
調べる箇所は10カ所なんだよな・・・
まさか保守費用をぼったくるトリックか?
458仕様書無しさん:2005/07/06(水) 10:24:12
多言語との連携取るなら意識しないとまずいだろ。
サブルーチンの再利用性とか考えないのか?

と思ったがこういったことを意識しないからVBが嫌われる、という落ちか。
459仕様書無しさん:2005/07/06(水) 20:16:52
>>458
多言語で再利用するようなもん普通VBで書かんでしょ。
逆ならDLL化されるのでそこではもちろんDeclare宣言するので意識する。
460仕様書無しさん:2005/07/07(木) 02:36:04
ありがちというべきか、いまさらというべきか、とにかく脱力した。

void strncopy(char* t, char* s, int n)
{
   for (int j = 0; j < n; j++);
      *t = *s;
}
461仕様書無しさん:2005/07/07(木) 05:52:45
>>460
一瞬、あってるじゃん、と思った俺は負け組
つか、ソースはやっぱり、等幅フォントで見たいな
462仕様書無しさん:2005/07/07(木) 09:02:19
いや、nが0以下のときは「想定される仕様」通りに動くぞw
463仕様書無しさん:2005/07/07(木) 09:58:01
strncpy系としての実装なら文字列終端チェックが無いな。
memcpyにしかなってない。
464仕様書無しさん:2005/07/07(木) 09:58:40
ネタくせー
465仕様書無しさん:2005/07/07(木) 11:22:41
>>462
1の時も想定通りだと思ふ
466仕様書無しさん:2005/07/07(木) 11:28:06
むしろ0以下は想定の範囲外のような。
467462:2005/07/07(木) 11:31:18
>>465
おぅスマンスマン。確かにご指摘のとーりだ(爆笑)。修正する。
nが1のときのみ想定通りに動く
468仕様書無しさん:2005/07/07(木) 12:05:10
\0挿入してないから全部ダメなんでねーの?
469仕様書無しさん:2005/07/07(木) 12:45:12
むしろj++するのを忘れて無限ループにしちゃうことが年に一度はあるな俺
470仕様書無しさん:2005/07/07(木) 13:40:46
文字列終端チェックとかって関係あるか?
471463:2005/07/07(木) 14:06:20
>>470
「strncpy系としての実装」と断り書き入れている意味わからないか?
468もそれに関連した指摘をしてくれている。
strncpyとmemcpyの動作くらい区別しろよ。
472仕様書無しさん:2005/07/07(木) 17:15:39
↑まあまあ。どうにもこうにも
代入は一回しか動作しないコードなんだから、
そんなにムキになるだけエネルギーが勿体ないよ。

473仕様書無しさん:2005/07/07(木) 18:21:34
474仕様書無しさん:2005/07/07(木) 18:28:34
なぜカウンタがiじゃなくjなのか、ずっと考えていた

きっと、iをグローバル変数で既に使っているのだろうと思い至った
475仕様書無しさん:2005/07/07(木) 18:31:25
要するに( ´∀`)<ぬるぽ
476465:2005/07/07(木) 19:31:08
>>460
やべ、forの行のセミコロンに今やっと気づいた・・・
477仕様書無しさん:2005/07/07(木) 19:32:51
新人研修のとき、プログラムを作れ!といわれてプログラムを渡された。
JUnitのテストケースだった・・・ミッションは緑を出すこと。

そこまではいい。そこまでは。
むしろいきなりテストファースト教えるなんて、
…なんて…なんてgoodな会社なんだ!とも思った…

30個のメソッド検査するテストケースがたった1メソッドとは一体どういう事だ!!!
478仕様書無しさん:2005/07/07(木) 19:38:14
forの最後に「;」があるから、jもnもまったく意味ないね。
479仕様書無しさん:2005/07/07(木) 20:03:09
>>478
急に分かりきったことを言い出してどうしたんだ?
どういうネタだかさっぱりわからん。
480仕様書無しさん:2005/07/07(木) 20:07:41
今頃気付いたんだろ
そっとしておいてやれっつーに
481仕様書無しさん:2005/07/07(木) 21:46:56
>>479
すまん、今頃気付いた。
t++; s++;がないから先頭コピーと考えてたよ。

まぁ、動作は同じか。
482仕様書無しさん:2005/07/08(金) 00:29:28
コードじゃないけど、コメントの変更履歴
「変更点はソースを調べれば判るはず。
ソッチもプロなんだから、自分で調べろ。
履歴を入れるで、俺の作業時間が減るほうが、
会社の損になるくらいわかるだろう。
だいたい、こんな変更履歴に頼ろうとするお前が、
間抜けすぎるんだよ」

そのPGは、この変更の直後、会社を辞めた。
483仕様書無しさん:2005/07/08(金) 00:32:00
それはスレ違いなのかスレにぴったりなのかよくわからんソースだなwwっうぇ
484仕様書無しさん:2005/07/08(金) 01:15:59
ふと思ったんだがよォ・・・
Uキーを2回押しても「っう」じゃなくて「うう」になるよなァ・・・?
それってつまり「っ」をわざわざ「xtu」と入力してるってことだよなァ?
VIPPERってハイテンション気取ってるけどよォ・・・
けっこう冷静だったりするんじゃーねぇか?
485仕様書無しさん:2005/07/08(金) 01:22:11
weと入力してみたらどうだ。

まあ、月配列使いの漏れには関係ないが。
486仕様書無しさん:2005/07/08(金) 01:22:39
we -> wwe
487仕様書無しさん:2005/07/08(金) 01:24:28
>>484
Wキーを押し下げつつ、
Eキーをすばやく叩く。
488仕様書無しさん:2005/07/08(金) 01:48:14
wwwwっうぇwwwwwwの書き方を素で知らん奴って案外多いんだよな。
つーか、どうしてエが入るのかちょっと考えれば分かると思うんだが。
問題解決能力ヒクス
489仕様書無しさん:2005/07/08(金) 01:49:53
490仕様書無しさん:2005/07/08(金) 01:59:26
この程度のキーバインドもしらんのか
491仕様書無しさん:2005/07/08(金) 06:40:56
ふつうにスクリプト書いて M-x wwe あたりにするよな。。。
492仕様書無しさん:2005/07/08(金) 11:17:02
嫌過ぎるVIPPERだ
493仕様書無しさん:2005/07/08(金) 16:26:33
print "<input type=hidden name=password value='{$form['password']}'>";
494仕様書無しさん:2005/07/08(金) 17:06:07
>>493

じわじわと来た
495仕様書無しさん:2005/07/08(金) 17:10:38
HTML文法違反
496仕様書無しさん:2005/07/08(金) 19:06:16
main(){
fprintf(prn, "なんちゃら帳票 Page:1\n");
fprintf(prn, "---------------------\n");
fprintf(prn, "| %s |\n", data[0].no);
fprintf(prn, "| %s |\n", data[0].name);
:
:
fprintf(prn, "なんちゃら帳票 Page:2\n");
fprintf(prn, "---------------------\n");
fprintf(prn, "| %s |\n", data[1].no);
fprintf(prn, "| %s |\n", data[1].name);
:
:
fprintf(prn, "なんちゃら帳票 Page:3\n");
fprintf(prn, "---------------------\n");
fprintf(prn, "| %s |\n", data[2].no);
fprintf(prn, "| %s |\n", data[2].name);

奴のプログラムにループは存在しない。
497仕様書無しさん:2005/07/08(金) 19:21:07
#勘弁して
498仕様書無しさん:2005/07/08(金) 19:50:29
ありえない
なにかのまちがいではないのか
そうだといってくれ
499仕様書無しさん:2005/07/08(金) 19:51:30
感動的なダメソースだな
500仕様書無しさん:2005/07/08(金) 20:09:05
ループアンローリングだろ?
501仕様書無しさん:2005/07/08(金) 20:17:41
きっと行数で支払われるんだよ
502仕様書無しさん:2005/07/08(金) 20:22:43
Dim TXT_038 AS TextBox
Dim CMD_030 AS Button



VB やるだけでもうぜーのになんだよこの名前。
ふざけんな。
503仕様書無しさん:2005/07/08(金) 20:37:14
ちなみに496のプログラム終了方法はセグメンテーションフォルト。
504仕様書無しさん:2005/07/08(金) 21:12:59
482はSCM使えってことか?
505仕様書無しさん:2005/07/08(金) 21:18:15
元COBOLのプログラムをCに移植したやつ、それのメンテの仕事に就いたんだが、
COBOLの元のソースコード1行をコメントアウトして、
それに対応するCのコードがその後1行。
でまたコメントアウトされたCOBOLのコードが…という繰り返し。
1行対1行のセットにするためにCのコードのほうで無理しまくり。
仮に今からCのコードを新規に追加するとしても「わかりやすいように」
COBOLのコードとセットでCのコードを書かなければならないので、
COBOLの勉強もしてる…
でも他の面々の苦労談聞いたら俺なんかまだましだな。
506仕様書無しさん:2005/07/08(金) 21:51:11
>505
結構珍しくないぞ。
507仕様書無しさん:2005/07/08(金) 22:17:39
移植分はさておき追加分をCOBOLで書く必要性が全く感じられない気がするのだが。
508仕様書無しさん:2005/07/08(金) 22:30:41
移植分を書く必要性も感じられないが
509仕様書無しさん:2005/07/09(土) 02:05:02
>>503
神レベルだなw
510おはつです:2005/07/09(土) 04:40:18
if (...) {
100行ぐらい
}
if (...) {
同じ100行ぐらいのを1〜10行だけ変えたやつ
}
が延々と続き1関数で10,000行を超えてた似たような関数が2つあって
1ファイル20,000行をこえ/ucb/bin/ccでコンパイル通らず
コンパイラのライセンスないからgccをインストールさせた極悪ソースコード。
511おはつです:2005/07/09(土) 04:46:28
>>510
ちなみにコメント、空行、一切なし
512おはつです:2005/07/09(土) 05:03:57
ヘッダーのファイル
#define begin {
#define end }
等延々と

実際の関数とか

begin
....
end

ていうCのソース、新人に見せるな、最初何でコンパイル通るのかわからんかったぞ
513仕様書無しさん:2005/07/09(土) 07:50:44
>>512
藻毎、本当は見た事無いだろ。本には載ってるけど、、、スレタイみたいな紹介文で。。。
514仕様書無しさん:2005/07/09(土) 10:00:18
>>510
なぜ二万行も書いてしまうまで放っておいた。
半分はコピペだとしても一万行書くのに何日かかる?
515仕様書無しさん:2005/07/09(土) 10:27:07
>>493
それって単体でマズイんですか?
516おはつです:2005/07/09(土) 11:52:06
>>513
見たよ10年以上前に、3日だけ、先輩が手伝えって、なので記憶はいい加減
某大企業の電子顕微鏡のシステムだ

>>514
知るかー(笑)、機能追加するプロジェクトだったのだが
すでにVersion4だった、5年かけて成長させたらしい。
517仕様書無しさん:2005/07/09(土) 19:32:18
夏場の行楽地のごみ箱みたいだな

入り切らなくなった空き缶が積み重ねられ、
大きなオブジェに


そしていつかくる崩壊の時。
518仕様書無しさん:2005/07/09(土) 22:36:20
崩壊する時に関わってなければおk
519仕様書無しさん:2005/07/10(日) 02:30:27
C#にて

#region 適用範囲FROM1
txb適用範囲FROM1.Text = row["適用範囲FROM1"];
#endregion 適用範囲FROM1

#region 適用範囲TO1
txb適用範囲TO1.Text = row["適用範囲TO1"];
#endregion 適用範囲TO1

#region 適用基準1
txb適用基準1.Text = row["適用基準1"];
#endregion 適用基準1

 :以下同じような代入文が30個位


regionうぜー
520仕様書無しさん:2005/07/10(日) 21:01:04
>519
てゆーか、命名規則がまんまVBなんだが……所詮VBの代替言語なの? > C#
521仕様書無しさん:2005/07/10(日) 21:05:11
文末に ; ついてるだろうが
522仕様書無しさん:2005/07/10(日) 21:19:26
すごい、さすがC#だ。
523仕様書無しさん:2005/07/10(日) 21:37:29
>>521
Cの欠片って感じだな
524仕様書無しさん:2005/07/11(月) 00:03:45
C#って日本語変数名使えるのかよ
勘弁してくれ
525おはつです:2005/07/11(月) 03:34:51
>>517 >>518
とりあえず崩壊からは免れた。
崩壊しそうだったので他社に押し付けた。
526仕様書無しさん:2005/07/11(月) 09:48:09
>>493のまずい部分、まずそうな部分を考えさえるのは新人への課題に良いかもしれない
527仕様書無しさん:2005/07/11(月) 17:56:48
VC++でもVBの命名規則使う人いるよ。
528仕様書無しさん:2005/07/12(火) 00:05:59
>>520
実は命名規則はVB.NETからはプレフィックス式じゃなくなってるという2重ガックリ。
529仕様書無しさん:2005/07/12(火) 10:12:09
オブジェクトに何かさせるという処理が連なるわけだから
プレフィックスに意味は無くなる。
530仕様書無しさん:2005/07/13(水) 21:28:46
いやそれでもおれはプレフィックスつか版画利杏を使うぞ。
C#でもPerlでも、ナニがナニでも。
531仕様書無しさん:2005/07/13(水) 21:59:00
>530
N88BASICでも。
532仕様書無しさん:2005/07/13(水) 22:22:42
>>530
N60BASICだっけ、変数は3文字までの奴
533仕様書無しさん:2005/07/13(水) 22:42:19
ハンガリアン話はスレ違い
534仕様書無しさん:2005/07/14(木) 00:23:49
if (!(obj.getXXXFlag() == false)) {
535仕様書無しさん:2005/07/14(木) 01:06:39
オブジェクト指向でいこうってのに○○flagが多すぎるソースコードは疲れるな。
MVCモデルでいこうってのにView側でソートとかやらせたり。
536仕様書無しさん:2005/07/14(木) 01:50:02
ビューでソートはありうると思うんだが
537仕様書無しさん:2005/07/14(木) 13:02:38
>>534
flag を指摘するべきか、false を指摘するべきか…。
538仕様書無しさん:2005/07/14(木) 17:28:15
>537
あと ! もな。
539仕様書無しさん:2005/07/14(木) 17:43:34
if (obj.isXXX()) {
540仕様書無しさん:2005/07/15(金) 00:32:31

void hoge() {
   HOGE_STR hoge;

   // hogeにいろいろセット

   AfxBeginThread(ThreadFunc,(LPVOID)&hoge);
   Sleep(100);
}

ベテランの書いたソースです。
Sleep取ったらまともに動きゃしねぇ(あたりまえだが)。

恐ろしいのが、これが某所で既に運用始まって3ヶ月たってるシステムの
とある部分のソースなことだ…。

こんな会社もういやorz
541仕様書無しさん:2005/07/15(金) 00:53:12
そもそもスレッド起動してる理由はなんなわけ?
542仕様書無しさん:2005/07/15(金) 00:53:23
>540

Sleep以前にマシン入れ替えてもハマリそうだなぁ。
ところでイベントやセマフォ+WaitForSingle(Multi)Objectって
使われていないのかなとおもう今日この頃。

#それ以前に作りがどうこうという問題はべつだが
543540:2005/07/15(金) 00:59:25
>>541
平行で複数の対象に同じ処理をする必要があるから。
具体的に言うと何屋だかバレバレなので勘弁…。

>>542
グローバル変数を排他無しにスレッドの内外から
操作しまくりですがなにか?

運用開始してるから大規模に治すわけにも行かずorz
ほんとまぁよく動いてるなぁ…。
544仕様書無しさん:2005/07/15(金) 01:12:15
たいして使われて無い1票
545仕様書無しさん:2005/07/15(金) 01:40:07
>>544
その1票は確かに使われて無いw
546仕様書無しさん:2005/07/15(金) 01:41:12
>542
とりあえずCreateProcessしてWaitForSingleObjectはしょっちゅう。
547仕様書無しさん:2005/07/15(金) 01:58:26
>>535
しかもそのflagが決まってString型なんだ。

if(fooFlag.equals("1")){

ムキー! なんでみんなそんなStringが好きなんじゃー!
548仕様書無しさん:2005/07/15(金) 03:12:37
>>547
Perlに導いてやるがよい。
549仕様書無しさん:2005/07/15(金) 10:20:26
>>542
Keなんて頭付けるくらい余裕あるならDISPATCH_LEVELで呼んでも飛ばないようにして欲しかったよ、MS。
550537:2005/07/15(金) 21:50:05
>>538
いや、だから、false と比較して ! するくらいなら
true と比較しろよ、って意味だったのですが。
false 絡みで、他にも指摘する部分があるということかしら?
551仕様書無しさん:2005/07/15(金) 22:05:06
まぁ、言語によってtrueは実体値が違うので比較はfalse基準でやるのが無難、ってノウハウもあるにはあるんだが
ぶっちゃけ厳格にどうこう言う程のもんではない。
552仕様書無しさん:2005/07/15(金) 22:18:30
if( foo != 0 )
て書いてあると虫唾が走る体質ですがなにか
553仕様書無しさん:2005/07/15(金) 22:36:05
>>552
条件追加した時のミスが若干減るからいいじゃん
554仕様書無しさん:2005/07/15(金) 22:38:39
if(userCode == null || userCode.equals(null)){
  userCode = "";
}

おかしいですよカテジナさん!
555仕様書無しさん:2005/07/15(金) 22:47:23
ぬるぽ
556仕様書無しさん:2005/07/15(金) 22:50:49
がっと言って欲しいのか?この腐れま○○が!
557仕様書無しさん:2005/07/15(金) 22:53:12
>>554
おかしいけどありえなくはない気はする。
equalsメソッドの実装次第で。
まぁ、それはそれでとてつもなくおかしいんだが。
558仕様書無しさん:2005/07/15(金) 22:59:01
>>552
ゼロじゃないフゥ〜!!
559仕様書無しさん:2005/07/16(土) 00:36:59
>>557
userCode == nullが既に真なら後ろのは実行されないんで
ホントに無意味なんですけどね……。

あと、いまjava.lang.Object#equals()のjavadoc読んで来たんですが、

・null でない任意の参照値 x について、x.equals(null) は false を返す

なんて明記されててちょっとだけ驚き。
a.equals(b)とb.equals(a)を同じ意味にするためにぬ○ぽを投げるとか
勝手に思いこんでました。

#ちゅーか、equals()って結構細かいこと決めてあるのね……
560仕様書無しさん:2005/07/16(土) 00:52:19
>>557
userCode.equals(null) を有意にするには null.equals(null) を成立させなければならない
つまり「null インスタンス」が存在しなければならないw
561仕様書無しさん:2005/07/16(土) 04:08:13
>>560
それは逆だろ。
userCodeがnullじゃないときに後の式が評価される。
562仕様書無しさん:2005/07/16(土) 08:47:40
>>550-551
論理型を論理リテラルと比較する時点で
頭が悪いと言わざるを得ない。
563560:2005/07/16(土) 11:31:15
>>561
んなこた〜わかってるw

その上で >>557
>おかしいけどありえなくはない気はする。
>equalsメソッドの実装次第で。

に対して userCode.equals(null) に意味を見出すための
思考実験をしただけ
564仕様書無しさん:2005/07/16(土) 18:16:56
>>552
やっぱこうだよな

if( (foo != 0) != 0 ) // 念のため
565仕様書無しさん:2005/07/16(土) 18:23:30
>>563
そうか、コレが噂の「nullオブジェクトパターン」か!(違
566仕様書無しさん:2005/07/16(土) 18:39:47
>>562
じゃぁ、何と比較するのでしょう?
567仕様書無しさん:2005/07/16(土) 18:50:23
0,true,false,null
!をつけての大小比較

みんなぬllp
568仕様書無しさん:2005/07/16(土) 19:18:09
>>566
論理型と論理型を比較した結果は論理型なんだが、それも比較するのか?

このような疑問で夜も寝られなくなってしまうので、論理型とそのリテラルの
比較が存在すると困る。
569仕様書無しさん:2005/07/16(土) 19:52:53
>>568
あぁ、なるほど。こういうことですか?

× if (!(論理型 == false))
× if (論理型 == true)
○ if (論理型)

if 文に渡すのは論理値なので、論理型ならそのまま渡せと?
570仕様書無しさん:2005/07/16(土) 20:29:35
普通そうじゃね?
571仕様書無しさん:2005/07/16(土) 22:55:25
>570
ありきたりのレスですまんが、>569の3番目は
コーディング規約で禁止されてる場合もある。
しかもbool型はNGでBOOL型を使え、だったり…orz

当然↓のような書き方をしてハマることは日常茶飯事。
 if( bHoge == TRUE )
572仕様書無しさん:2005/07/16(土) 23:09:45
>>571
とりあえず!!付けさせとけ。

if (!!bHoge == TRUE)
573仕様書無しさん:2005/07/16(土) 23:23:44
if (!!!!!!!!bHoge == TRUE)
574仕様書無しさん:2005/07/16(土) 23:50:48
if(A==B) という書き方のほうが「人間にわかりやすい」ことは確か
どうせ最終的にできるコードはたぶん同じなのだから、
流儀の問題でしかないと思うが
575仕様書無しさん:2005/07/17(日) 00:13:31
>>571
>コーディング規約で禁止されてる場合もある。
だから辞めたくなるんでしょ?
576仕様書無しさん:2005/07/17(日) 00:43:06
>>571
BOOL 型ってどの言語なのか良くわからんのですが、ハマるとは?
577仕様書無しさん:2005/07/17(日) 00:51:20
>>576
Cで typedef int BOOL がよく見るケースだな。
でいっしょに #define TRUE 1 とかしてある。

たとえば、

int bit_flags;
BOOL is_xxx = bit_flags & XXX_BIT;

んで、 XXX_BIT が 0x0004 とかなってると、

bit_flags = 0x000f のとき、 is_xxx が 0x0004 になって、
if(is_xxx == TRUE) とかしてハマる。

これを避けるために「FALSEと比較しろ」とかいう
アフォなルールをどっかのバカが広めたらしい。
「論理値を等値比較するな」が正解だろう。
578仕様書無しさん:2005/07/17(日) 01:06:28
「intをBOOLにtypedefするな」でもいいと思う。
579仕様書無しさん:2005/07/17(日) 01:07:14
>>578
じゃぁANSI Cしか使えない環境ではどうすれば・・・
580仕様書無しさん:2005/07/17(日) 01:11:09
>>577
false と比較しろっていうのは、
論理型が言語仕様に無い場合の話だったのですね。
論理値と true が比較できないなんて、
処理系のバグじゃないかと思ってましたわ。
581仕様書無しさん:2005/07/17(日) 01:16:33
>577
  _、_
( ,_ノ` )y━・~~~ アフォなルールかもしれんが、地獄で生き抜くには必要だ。
582仕様書無しさん:2005/07/17(日) 01:18:48
>>581 オマエがどっかのバカですか?
583仕様書無しさん:2005/07/17(日) 01:27:28
せっかく論理型として typedef した BOOL 型に、
bit 演算の結果を代入してるのが、そもそもの間違いでしょう。
BOOL 型への代入には define した TRUE、FALSE を使え、
というルールの方がしっくりくるなぁ。
584仕様書無しさん:2005/07/17(日) 01:36:43
>>583
そのルールだと BOOL x = a < b; こんなのもダメってことかい?
585仕様書無しさん:2005/07/17(日) 01:39:33
>577
VBだかなんだかでTRUEが1じゃなく-1だとかでバグるって話じゃないのか?
まぁ他の言語も考えるならFALSEが0とも言い切れない気がするが。
586仕様書無しさん:2005/07/17(日) 01:51:36
>せっかく論理型として typedef した BOOL 型に
せっかくとか言うな。そもそもそんなことするからだ。
587仕様書無しさん:2005/07/17(日) 02:55:16
>>580
>論理値と true が比較できないなんて
比較するのが阿呆だ、と何度言えば。
588583:2005/07/17(日) 03:24:13
>>584
そか。論理値なら良いのか…。orz
589仕様書無しさん:2005/07/17(日) 03:35:27
え〜っと
#define true (0==0)
#define false (!true)
ってのどっかでみたよ
590仕様書無しさん:2005/07/17(日) 03:49:16
>>589
Cでは比較式の偽の値は0で、真の値は1と決まってるから、そんな凝った宣言しても意味無い。

#define true 1
#define false 0

にくらべて、まったく可搬性が向上していなくて、可読性が悪くなってる。
591仕様書無しさん:2005/07/17(日) 07:02:12
違うぞ、0は偽だが0以外は全部真だ。
だから==でtrueと比較するとハマるんだよ。
592仕様書無しさん:2005/07/17(日) 07:24:17
いままでの話を総合するとこれが正解か?

if( !!( b != false ) != false )

さらに確実にしてバグを減らすにはするにはこう?

if( !!!!( ( b != false ) != false ) != false )

品質のためにはもう2、3個 != false 追加しといた方がいいかな?
593仕様書無しさん:2005/07/17(日) 07:39:54
「Cでは真の値は1と決まってる」伝説って何故こんなに広まってるんだろ。
594仕様書無しさん:2005/07/17(日) 07:41:26
if(a!=0){b+=a};
595仕様書無しさん:2005/07/17(日) 09:12:15
>>593
Cでは、0以外のすべての値を真として扱う
が、評価式においての真の値は1になることは保障されている
596仕様書無しさん:2005/07/17(日) 10:04:44
結局if(true)と書くのが一番読みやすいし間違いもない、と。

それをコーディング規則で禁止するなんていうアフォがいるから話がややこしくなる、と。
597仕様書無しさん:2005/07/17(日) 11:02:48
>>592
そりゃ大変だ。
  int a, b;
    :
  if (a == b)

なんてのも全部

  if ((a == b) != false)

にしないと!
598仕様書無しさん:2005/07/17(日) 11:07:40
C89ではTRUEをdefineしなければ解決。
599仕様書無しさん:2005/07/17(日) 12:40:59
>>596
たとえばif(foo)だったものに条件追加する時、まちがえてif(foo & bar)ってしてしまった
とします。
それを後で見た人がif(foo && bar)のまちがいなのか、そのままであってるのか
一見してわからないから、そういうコーディングルールがあるのです。

もし始めにif(foo != 0)と書いておけば、上記のようなまちがいはif(foo != 0 & bar != 0)
となり、これなら誰が見ても間違いだとわかるでしょう。

intとtrueの比較とは別の問題ですが。
600仕様書無しさん:2005/07/17(日) 13:54:58
>>599
うちは規約で禁止されてないけどif(foo)は怒られる。理由は「意味がわかんないから」
601仕様書無しさん:2005/07/17(日) 13:57:59
それはfooの名前の付け方次第では?
602仕様書無しさん:2005/07/17(日) 14:09:02
>>601
f(foo)
こう書くとfooに何入ってるとif文の中が実行されるかっていうのがわかんないだって
603仕様書無しさん:2005/07/17(日) 15:33:03
遅れた話だけど
null と equals はJava House MLで散々モメて
最後にひろみちゅせんせーがぶち切れたという
話がある。
604仕様書無しさん:2005/07/17(日) 15:41:38
>>599
無さそうな間違いをする前提で妙なルールを押しつけるのはおかしいよ。
ポインタ禁止とかと変わらん。
605仕様書無しさん:2005/07/17(日) 15:45:47
極端に能力が低い人でも間違わないように という前提で作られるコーディング規約
なんてマスターベーションを下げるだけ
606仕様書無しさん:2005/07/17(日) 15:50:29
>>605
マスターベーションが上げる職場なんて、激しくイヤだ
607仕様書無しさん:2005/07/17(日) 16:04:11
マスターベーション ワロタ
608仕様書無しさん:2005/07/17(日) 16:05:54
> 無さそうな間違いをする前提で

絶対にタイプミスしない人ですか?
それともビットマスクを使わない?


> 極端に能力が低い人でも間違わないように という前提で

一定以上のスキルがある人間しか触らせないという保証があるなら
別に縛らなくてもいいと思いますが。
609仕様書無しさん:2005/07/17(日) 16:12:15
でもそれは流石に低い方に合わせすぎでしょう(w
610仕様書無しさん:2005/07/17(日) 16:16:45
こうなればMS法式でいくしか
if SUCCEEDED(hr) { ... }
if FAILED( hr ) { ... }
611仕様書無しさん:2005/07/17(日) 16:20:04
>>608
タイプミスもあるしビットマスクも使うが、あの間違いは無い。
&を1つと2つでは視覚的にも大きく異なるし、その場で見逃すことは
考えにくい。もっと他の間違いのほうがありそうだ。
if (foo & bar !=0)とかな。

逆に聞きたいのだが、何かデータを持っているのか?
612仕様書無しさん:2005/07/17(日) 16:32:58
> &を1つと2つでは視覚的にも大きく異なるし、その場で見逃すことは


&にしたのはあくまで例で、|だったら1つと2つでは視覚的に見過ごしやすい
でしょう。

> if (foo & bar !=0)とかな。

いや・・だから、常に!=0と書く習慣があれば、if (foo !=0 & bar !=0)となって、
これならすぐわかるでしょう、という話なのですが。


> 逆に聞きたいのだが、何かデータを持っているのか?


体験や伝聞はありますが、データはありませんよ。
ソフトウェア作法あたりの影響かも。
613612:2005/07/17(日) 16:35:38
誤)これならすぐわかるでしょう
正)これならすぐ間違いだとわかるでしょう
614仕様書無しさん:2005/07/17(日) 16:36:03
>>599のケースは論理型を意図してない変数にif(foo)ってやるから書き間違いの考慮
する必要があるわけだよね。
でも論理型を意図してなくてif(foo)がありかは別の議論じゃない?
俺はif(!memcmp(a,b,sizeof(a)))みたいな書き方は反対だよ
615仕様書無しさん:2005/07/17(日) 16:54:18
>612
& と && だろうと | と || だろうと大して変わらないと思うのだが。
プロポーショナルフォント使ってるとか無駄にサイズ小さくしてたりする人ですか。

どうでもいいけど最近なんか学生っぽいのが多いね。
世間はそろそろ夏休みなんだっけか? orz
616仕様書無しさん:2005/07/17(日) 17:26:46
>>612
だからなんでレアケースな間違いを救うためにまぬけな規則を作るのか?

だいたい、数値に!=0をつける習慣があるなら、if (foo & bar)は
if (foo && bar)の間違いとすぐに分かる。

論理値に!=0など不要だ。
617仕様書無しさん:2005/07/17(日) 17:29:12
別に短絡評価が発生しないだけで、
if( a & b ) も、 i( a && b )も結果は同じだろう?
618仕様書無しさん:2005/07/17(日) 17:39:05
if (foo & bar)
って必ず警告出るんでないの?
619仕様書無しさん:2005/07/17(日) 17:39:08
C言語プログラムならaやbが副作用のある式である場合も多いので
短絡評価の違いは侮れない。
620葉猫 ◆Jz.SaKuRaM :2005/07/17(日) 17:43:11
if (foo && bar) にちて register つければいいと思いまつ。
621仕様書無しさん:2005/07/17(日) 17:51:38
> だからなんでレアケースな間違いを救うためにまぬけな規則を作るのか?


レアかもしれないですが、より安全ですよね。

> if( a & b ) も、 i( a && b )も結果は同じだろう?


a, bとも論理型でしたら。

ですが、

bool a = false;
int b = 1;

こんな場合は結果は違いますよね。

「条件式には論理型しか使ってはいけない」というルールがあるなら
構いませんよ。
622仕様書無しさん:2005/07/17(日) 17:55:37
>>617
(a == 1 && b == 2) の場合を考えてみな。

>>621
> こんな場合は結果は違いますよね。

いや、同じだよ。
623仕様書無しさん:2005/07/17(日) 18:05:15
>>621
変数を数値と比較することで、変数が数値だと思われてしまう危険性が
高まる。

論理値を数値と比較することのおかしさが分からんのか?

「条件式には論理型しか使ってはいけない」これは良いルールだ。
624仕様書無しさん:2005/07/17(日) 18:09:40
>>623
> 「条件式には論理型しか使ってはいけない」これは良いルールだ。

Java ではこれが採用されているそうですね。
625621:2005/07/17(日) 18:26:06
>>622
すいません。例えが間違ってました。
bool a = true;
int b = 2;

>>623
> 論理値を数値と比較することのおかしさが分からんのか?

それをわかっていますよ。
だからこそ、たとえ冗長でも常に==なり!=を書くようにしておけば
わかりやすいし安全だと。
626仕様書無しさん:2005/07/17(日) 18:48:27
>>625
おかしな事をやった方がわかりやすいし安全?
627仕様書無しさん:2005/07/17(日) 19:16:15
628仕様書無しさん:2005/07/17(日) 19:29:49
>>627
それは論理値と論理値の比較だよ。
数値と比較するよりはちょっとまし。
629仕様書無しさん:2005/07/17(日) 19:32:09
> ちょっとまし
630仕様書無しさん:2005/07/17(日) 19:43:52
つうかそのレベルのミスって
IDEのワーニングなりlintなりcheckstyleなり
FindBugsなりのツールで一括して弾けないか?

面倒な割りに発生確率の非常に低い(と思われる)バグの対策にしか
ならないであろう規約を設けるぐらいだったら、
「コミット時XXXツールによるチェックでエラーが0件であること」
みたいな規約を増やしたほうが有益だと思うがどうよ?
631仕様書無しさん:2005/07/17(日) 20:38:46
確かにこんなことでグダグダやってる職場なら、その手の
ソース見ただけで会社辞めようと思うのかなぁ・・・
とスレ違いにならんように引き戻しちゃろ。
632仕様書無しさん:2005/07/17(日) 20:59:50
if ( a =1 & b = 1 )
633仕様書無しさん:2005/07/17(日) 21:20:58
>>632
ウボァ('A`)
634仕様書無しさん:2005/07/17(日) 21:29:42
==true程度も打つのが面倒な奇形はプログラマ辞めとけ。
635葉猫 ◆Jz.SaKuRaM :2005/07/17(日) 21:40:46
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| 糞ソースしか書けないおまいがな。
\___  ______________
      V 

    ,   _ ノ)
   γ∞γ~  \          ,,;ξ
    |  / 从从) ) ハニャ-ン!!    ::)。m゚)ぃぎょっ!
三  ヽ | | l  l |っ        .,;;‘ V
  三`从ハ~ ワノ/~)Σ  ///
 三 ⊂    `' /  : : ;;
   三\    / ※;ζ8 
  三   ゝ  >  (x   )〜 ←>>634
  三    (,,ノ    U U
636仕様書無しさん:2005/07/17(日) 21:41:14
つまり if ( a && b ) とシンプルにしか書けない奴は辞めろと
637仕様書無しさん:2005/07/17(日) 21:44:43
if((a==true && b==true) == true)
プログラマ辞めたくなかったらこう書かないとだめなのか...俺には無理。
638仕様書無しさん:2005/07/17(日) 22:23:22
if (a.isHoge()) // アリ
if (a.isHoge() == true) // ナシ
if (a.isHoge() == false) // アリ
if (!a.isHoge()) // キライ

個人的には true との比較は意味がないのでやらない。
文頭の ! は見にくいので false との比較はわりと好き。
639仕様書無しさん:2005/07/17(日) 22:29:52
!は使うか結構悩みどころだな。
漏れは if(!(a))と括弧付きで少しでも自己主張するように書いてるがやっぱ読みにくいかな・・・
(あとは空白挟むとかも手か)
一番は!を使うのを避けられるような設計がいいんだろうけど。
640仕様書無しさん:2005/07/17(日) 22:34:18
また糞コテが増えたのか
641仕様書無しさん:2005/07/17(日) 22:40:12
指が滑ってこんな↓コードになってしまい、
「う?上位7bitコネー!?いや8ビット目もなんかちょっと違う」と
しばし悩んだことが俺にはありました。
眠くなったら帰って寝たほうがいいねえ。

   for (p = buf, i = words; i--; ) {
      word = *data;   // memory mapped i/o
      *p++ = word && 0xff;   // (byte swapped)
      *p++ = (word >> 8) & 0xff;
   }
642仕様書無しさん:2005/07/17(日) 22:44:26
>>638
>if (a.isHoge() == false) // アリ
キモイとは思わないのか…
まだ
  if (a.isHoge())
    ;
  else
の方がマシ。
643仕様書無しさん:2005/07/17(日) 23:04:04
>>641
まったくしょうがないやつだな

for (p = buf, i = words; i-- != 0; ) {
 word = *data;���// memory mapped i/o
 *p++ = word != 0 && 0xff != 0;���// (byte swapped)
 *p++ = (word >> 8) != 0 && 0xff != 0;
}
644葉猫 ◆Jz.SaKuRaM :2005/07/18(月) 00:07:39
>>643
そのソースはなんでつか。。。。。。。。。。。。。。。
645仕様書無しさん:2005/07/18(月) 00:22:04
>>642
昔VBでifには必ずelseをつけろ、っていってた奴を思い出した。

IF ... THEN
  ...
ELSE
ENDIF

IF ... THEN
ELSE
  ...
ENDIF

今でもVBで頑張ってんのかなあ…
646仕様書無しさん:2005/07/18(月) 01:23:28
仕方ないとは思うんだが…
if (a) foo(a);

void foo(void *a){
 if (a == NULL) return;
 goo(a);
}

void goo(a){
 if (a ==NULL) return;
 ...
}

こんな感じで10個ぐらい続いているのを発見
単体から見れば安全に作っているつもりなんだろうけどねぇ…
647仕様書無しさん:2005/07/18(月) 01:58:07
>>646
単体から見れば安全に作っているつもりならいいんだけど、こう書かないと上に怒られることもある
648仕様書無しさん:2005/07/18(月) 02:09:26
>>646
returnのところは実際にはエラー処理してると見込んだ上で。

「防衛的プログラミング」っていうんだっけか。
外部から与えられる環境・パラメータを一切信用しないって言う。

インターフェースの仕様がキッチリ決まっててしかも守られてれば
いらないんだろうけどねぇ。

ユーザ入力でもない部品間の呼び出しでコレやる羽目になるのは
切ないな。
649仕様書無しさん:2005/07/18(月) 02:14:05
falseとの比較か…
Win32APIとか生で叩いてるとそんな癖が付くなあ。
似非BOOL関数に数値返しが混じってるからな。名前で区別つかんし。
if(hoge())だけじゃ成功したんだか失敗したんだか。
それに加えてUNIX系のif(hoge()) {失敗}が
既存のソースにあったりすると('A`)ウボァ
650仕様書無しさん:2005/07/18(月) 02:30:56
>>648
普通にやってますよ。
他人の担当部分では、そうなっていないコードを良く見掛けます。
その度にイライラしているのですが、見なかったことにしてあげてます。
651仕様書無しさん:2005/07/18(月) 02:38:09
>>650
なるほど、そういうところもあるのね。
DbCってわけでもないんだよね?

パラメータ・環境は呼ぶ側で保障して、
呼ばれる側はチェックするとしてもアサーションって感じだな
こっちだと。
事前条件・事後条件がビタイチ守られないような状況だと
>>650のとおりチェックするしかないとは思う。
切ねぇけど。
652仕様書無しさん:2005/07/18(月) 02:58:11
>>649
有名なところでWin32APIのGetMessage関数かな。
BOOL型の癖に非0,0,-1が返る極悪な奴。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpwinui/html/_win32_getmessage.asp

BOOL GetMessage(
  LPMSG lpMsg,         // メッセージ情報
  HWND hWnd,           // ウィンドウのハンドル
  UINT wMsgFilterMin,  // 最初のメッセージ
  UINT wMsgFilterMax   // 最後のメッセージ
);

警告  GetMessage 関数は、0 以外の値、0、-1 のいずれかを返します。したがって、次のようなコードは避けてください。
while (GetMessage(lpMsg, hWnd, 0, 0)) ...
653仕様書無しさん:2005/07/18(月) 03:02:35
>>651
個人的にやってるだけです。
なので、他人のコードにケチ付けたりはしてません。
ただの部品なのでユーザ入力のような複雑なチェックまではしませんが、
部品が (一応) ちゃんと動く程度の NULL チェックの様なものはやってます。
単体として、どこに出しても恥ずかしくない娘にしてます。
ところで、DbC ってなんれすか?
654仕様書無しさん:2005/07/18(月) 03:10:52
>>653
Design by Contractでつ。
上記単語と「契約による設計」でググればザラザラあたるかと。
つか下記がわかりやすいかと。
ttp://www.fides.dti.ne.jp/~oka-t/cpplab-dbc.html
655仕様書無しさん:2005/07/18(月) 03:36:47
自分が書いたソースは娘なのか・・・萌えてきたよ
656仕様書無しさん:2005/07/18(月) 08:07:50
>>652
MSが頭悪いだけだと思う
657仕様書無しさん:2005/07/18(月) 14:44:32
>>650
イライラするだけで、NULLが渡された時にはどうするかをきっちり決めようとは
思わないのか?

他人のコード、自分のコードじゃなくて自分達のコードだろ?
658仕様書無しさん:2005/07/18(月) 19:18:55
>>657
まぁ、落ち着いて。>>650 をもう一度ちゃんと読めば、私以外の人が、
きっちり決めようとは思ってないんだ、ということがわかるでしょう。
659仕様書無しさん:2005/07/18(月) 20:09:55
どうせなら、ぬるぽが渡されたときは別の特別な処理をするよーな関数にしてしまえ
660仕様書無しさん:2005/07/18(月) 20:12:38
万一呼び出し間違いが合った場合、クラッシュしてくれたほうが開発者にとっては良い
が、客からすると、意味は解らないけどエラー出る、のほうが精神に良い
661仕様書無しさん:2005/07/18(月) 20:18:07
>>658
コミュニケーション能力が欠けていることは読み取れるよ。

他人の担当部分は…見なかった事にとか、他人のコードにケチをつけるとか
発想が間違ってる。自分のコードの不具合を指定されたらケチを付けられたと
思うか?感謝するだろ?
662仕様書無しさん:2005/07/18(月) 20:35:15
>>657 の不具合を指摘されて、ケチ付けられたと思った >>661、に見えゆ。
663661:2005/07/18(月) 20:40:53
>>661は感謝しながら熱くなって書いた。
664仕様書無しさん:2005/07/18(月) 20:53:55
>>659
こうか?

try {
  do something...
} catch (NullPointerException e) {
  Hammer hammer = new Hammer();
  while (true) {
    hammer.doGa(">>659");
  }
}
665仕様書無しさん:2005/07/18(月) 22:51:11
またそうやって文字列を使う・・・
666ダミアソ:2005/07/18(月) 23:10:24
 
667仕様書無しさん:2005/07/18(月) 23:35:22
せめて hammer.fall とかにしてくれ
668仕様書無しさん:2005/07/19(火) 06:24:37
殴り方が一種類ならね
669仕様書無しさん:2005/07/19(火) 07:47:19
そこで多態ですよ。
670仕様書無しさん:2005/07/19(火) 08:20:58
多態だと得物が増えね?
671仕様書無しさん:2005/07/19(火) 09:56:32
殴り方を多態化すると、なんで得物が増えるの?
672仕様書無しさん:2005/07/19(火) 21:10:49
ああ、そっか。「殴り方」の方を汎化してIoCするのか
673仕様書無しさん:2005/07/19(火) 21:33:07
Strategy Pattern ですな.
もっともだったら
Hammer hammer = new Hammer();

Weapon hammer = new Hammer();
にするべきだけどね.
674仕様書無しさん:2005/07/20(水) 01:06:22
>652
型だけでも int とかに書き換えときゃいいじゃんとか思うのが普通だと思うけど、
なんかそれを出来ない理由とかあるのかね。興味もないけど。
675仕様書無しさん:2005/07/20(水) 01:41:22
>>673
そこまで言うと Factory Pattern も導入したくなる
「ガッ」したいだけなのにw
676仕様書無しさん:2005/07/20(水) 02:05:37
>>675
「当てはまるパターンがあることと、それを当てはめた方が良いかどうかは別である」

保守性が上がるわけでもないのに「xxパターンに当てはまるから」という理由で
無意味にコードの書き直しをしたがる人が最近増えた気がする。

いや、別に>>675を非難してるわけじゃなくて、なんとなく愚痴を思いついただけなんだが。
677仕様書無しさん:2005/07/20(水) 03:31:11
abstract class Weapon に抽象メソッド use() を用意して
Hummer extends Weapon で定義するべきではないのか
678仕様書無しさん:2005/07/20(水) 10:32:34
流れとは外れるが、"use"というメソッド名はあまりに汎用的すぎないだろうか。
名前には"attack"等の何をするかはっきり分かる動詞を選ぶべきでは。
679仕様書無しさん:2005/07/20(水) 14:17:57
#undef __TITLE__
#define __TITLE__ 【ぬるぽ】お前ら殴打クラス実装しようぜ【叩き】
680仕様書無しさん:2005/07/20(水) 17:49:24
辞めたくなったというほどでもないが。

    if (!(!foo.getHogeFuga1().equals("") && !foo.getHogeFuga2().equals("") &&
          !foo.getHogeFuga3().equals(""))) {
      ...
    }

!(!A && !B && !C) == A || B || C ではないか。
681仕様書無しさん:2005/07/20(水) 18:20:36
>>680
ついでに条件式丸ごとExtractMethodしてMoveして、
foo.hasAllHogeFuga()あたりにリファクタリングしてやってくれ
682仕様書無しさん:2005/07/20(水) 18:26:10
>>680
ORだと常にすべての式評価される。
683仕様書無しさん:2005/07/20(水) 19:15:28
>>682
されねえぞ。
684仕様書無しさん:2005/07/20(水) 19:17:06
>682
嘘書くなよw
685葉猫 ◆Jz.SaKuRaM :2005/07/20(水) 20:11:53
VBだと全ての式が評価されるのではないでちょうか。

書式は明らかにC系でつが。。。
686仕様書無しさん:2005/07/20(水) 20:54:59
ああ、そういや VB ってショートカットができないんだっけ。
すっかり忘れてた。
687仕様書無しさん:2005/07/20(水) 21:53:13
>>683-683
あぁ、真が出れば途中で抜けるか、確率は変わらんな。
んでも、頻度を考えると本当の意味で等価なのは

!(!A && !B && !C) == C || B || A

じゃないのか。
漏れまだなんか勘違いしてる?

>>685
VBはANDだろうがORだろうがIFの条件式は全部評価される。
688仕様書無しさん:2005/07/20(水) 21:56:56
こういうコードって、気持ち悪くない?

if (str == null || str.length() == 0) {
689仕様書無しさん:2005/07/20(水) 22:09:04
Eコマースサイト。リリース前でサーバーは遊んでる状態のはずなのに、 
「商品詳細画面」を1枚だすのに0.5秒くらいウエイトがかかる。 
「検索結果」に至っては体感2秒くらい待たされる。 

不思議に思って、SQLへの問合せ文を全部ブラウザに表示するように 
フックを入れてみた。 
するとブラウザ一面が文字でびっしりと埋めつくされた。IN ( SELECT が 
6重になってるところまであった。 

多分、途中から書いてる本人もワケワカんなくなっちゃったんだろう。 
690仕様書無しさん:2005/07/20(水) 22:10:33
ん?
str.length() == 0 が間接的で嫌だってこと?

あるいは…括弧を付けろってこと?
691仕様書無しさん:2005/07/20(水) 22:11:44
if( hogehoge != 1 ) {
  if( hoge.equals( "hoge" ) ) {
    hogeFlag = 1;
  }
} else {
  if( hogehoge != 1 ) {
    hogeFlag = 2;
  }
}
692仕様書無しさん:2005/07/20(水) 22:18:41
おわああ、このソースコードの主人は病気です。
693仕様書無しさん:2005/07/20(水) 22:23:13
>>688
言語が C++ なら、str の型によってはキモい。
694仕様書無しさん:2005/07/20(水) 22:23:31
型ちゃうわ、クラス。
695仕様書無しさん:2005/07/20(水) 22:32:00
>>690
言語仕様で左から評価されるのはわかってても
右側でぬるぽが出そうな雰囲気醸してるあたりが。
696仕様書無しさん:2005/07/20(水) 22:37:17
      ,   _ ノ)
     γ∞γ~  \  よろしくね♪
     |  / 从从) )
     ヽ | | l  l |∩  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      `从ハ~ ワノ / < こんなスレどうでもいいからこっちに来てねー♪
     ⊂ニ \>< /   \http://ex10.2ch.net/test/read.cgi/keiba/1121423656/
      /   ⌒)
     /__ し
     し
697仕様書無しさん:2005/07/20(水) 22:53:14
>>695
それは…さすがに気にし過ぎだと思うよ。
言語仕様の隅をつついたようなコードでもないし。

私としては、ごくごく普通の良い子ちゃんコードだと思うけどね。
698仕様書無しさん:2005/07/20(水) 23:32:25
なんか&&の短絡評価は直感的に理解できるんだけど、
||は一瞬考えてしまう。
699仕様書無しさん:2005/07/20(水) 23:40:32
>>697
半分同意。けど、nullか、長さ0か統一すべきだと思う。
まぁ、引き継いじゃったもんは仕方ないけど。
700仕様書無しさん:2005/07/21(木) 00:19:12
>>695
その意見からは、「心配だから、ぬるぽチェックは
if (str != null) {
   if( str.length() > ) {
...
のように分けて書け」なんてハゲチャビンな
コーディング規約が派生してきそうな気がしていやーん。



701仕様書無しさん:2005/07/21(木) 00:44:50
>>687
頻度って?
どっちにしても、左から評価されるんじゃないの?
702仕様書無しさん:2005/07/21(木) 00:45:50
>>699は実は全然わかってないんじゃないのか
703仕様書無しさん:2005/07/21(木) 00:49:58
>>687
勘違いしてる。もう一回じっくり考えなおせ。
704仕様書無しさん:2005/07/21(木) 00:51:45
>>700
このスレ見てると十分あり得るように思えてヤですな……。


ウチのとこのルール。
「クラス名の先頭には"HGE0100"などの識別IDを付与すべし」
単なるUtilクラスとかが"HGE0100Util"とかになって激しく邪魔なんですが。
と思ってたけど、最後にちゃんと「Util」が付けられるだけ幸せなんですね……。

Pure COBOL環境なコーディング規約の方々、ご愁傷様です。
705仕様書無しさん:2005/07/21(木) 02:54:45
>>634
if((foo == true) == true )
706仕様書無しさん:2005/07/21(木) 02:55:53
>>705
if( ( (foo == true) == true ) == true )
707仕様書無しさん:2005/07/21(木) 02:57:04
>>706
if( ( ( (foo == true) == true) == true ) == true )
708仕様書無しさん:2005/07/21(木) 02:58:07
>>707
if( ( ( ( (foo == true) == true) == true) == true ) == true )
709仕様書無しさん:2005/07/21(木) 03:35:13
いつまで続ける気だよw
710仕様書無しさん:2005/07/21(木) 03:52:04
>>687
評価を終える条件
&&:最初にどれかがfalseになったら
||:最初にどれかがtrueになったら
711仕様書無しさん:2005/07/21(木) 04:01:44
結局、>>688 のは言語は何で、str はどーゆー型 or クラスなんだ?
712仕様書無しさん:2005/07/21(木) 12:11:31
別に気持ち悪いコードでも無いから、これ以上追求しても意味無いのでは。
713仕様書無しさん:2005/07/21(木) 12:38:24
>>711
nullが小文字、str.length()から考えると、
Java辺りと見たがどうよ?
C/C++じゃないのは確かだろう。
714仕様書無しさん:2005/07/21(木) 12:50:10
ごくふつーのJavaのコードだと思う
715仕様書無しさん:2005/07/21(木) 14:02:50
PHPだけど。

function printIchiran(){
  global $database;
  global $form;
  global $html;
  global $template;
  global $shohin_list;
  global $shonin_template;
  global $now_page;
  global $next_page;
  global $prev_page;
  global $pages;
     :
}

止めてくれー。
716仕様書無しさん:2005/07/21(木) 18:12:41
↑(;'A`)・・・・
717仕様書無しさん:2005/07/22(金) 00:49:50
Ichiran
まで読んだ
718仕様書無しさん:2005/07/22(金) 01:06:26
色々端折ってるけど分かるはず。
何でこんな冗長なことするのかな
if( hage.getHoge() == null ) {
    hage.setHoge( "" );
}

public class Hage {
    private String hoge;
    public String getHoge() {
        if( this.hoge == null ) {
            this.hoge = "";
        }
    return this.hoge;
    }
.....
719仕様書無しさん:2005/07/22(金) 01:16:37
最初はgetHogeの中でnullチェックしてなかったんだろう。で、呼び側でチェックしてた
それを後に指摘されてgetHogeでチェックするようにしたんだけど、
もう書いちゃった部分を直し忘れたと。そんなとこじゃないかな
720仕様書無しさん:2005/07/22(金) 01:18:58
char *p=str;
if( strncmp(p,"a",1) != 0 ){...}

まあ初心者がやりがちではあるが・・・
721仕様書無しさん:2005/07/22(金) 02:04:49
>>718
やたらnullチェックしたがる人間は多いな……。
こーいうソースって、単体テストでnullチェックが働くこと全部検証してるのかな。

個人的には、メソッドのシグニチャで「オブジェクトを渡せ」って言ってるんだから、
nullを突っ込まないようにするのは呼ぶ側の務めだと思ってるんだが。
もちろんnullにちゃんと意味がある場合はその旨どこかに記述するけど。
722仕様書無しさん:2005/07/22(金) 02:08:44
おいおい、publicである以上、なにが渡されるかわからんというのが基本スタンスだろ。
おれは何か実行する前にnullとかlengthとかチェックしまくるぞ。
723仕様書無しさん:2005/07/22(金) 02:16:37
チェックしないよりはしとくべきだと思うが
724仕様書無しさん:2005/07/22(金) 02:39:19
>>721
普通はするわな。
大概nullチェックで引っかかったらログを出してエラーを返して終わるから、
テストはしないけどな。

>>720
最初何が間違い?と思った。
一文字チェックなら関数呼ぶ必要ないってことか。
725仕様書無しさん:2005/07/22(金) 03:06:43
そういうのはアサートでやってください
726仕様書無しさん:2005/07/22(金) 03:35:06
assertは内部のprivateな実装の「想定外の」障害を検知するためのモンであって、
見つかったらそれは即「プログラムミス」。
publicなもんはちゃんとそれなりの例外を返すもんだ。
727仕様書無しさん:2005/07/22(金) 10:12:58
特に複数の人員で開発を行っているときは渡されたパラメータが悪いのか
内部処理が悪いのかは早々にはっきりできるようなプログラムにしておかないと
後々面倒が起きるからねえ。
728仕様書無しさん:2005/07/22(金) 10:13:46
>>724
最初は"a"で比較しようとして動かないのでstrncmpになったと見た。
一文字なので'a'になる、つー部分の罠だと思われ。
729仕様書無しさん:2005/07/22(金) 11:39:50
>一文字なので'a'になる、つー部分の罠だと思われ。
・・・?
730仕様書無しさん:2005/07/22(金) 12:32:52
VBでのおはなし

フォーム直下に3500行、そこから引数をByRef(しかも省略)で10個渡すよーな
グローバル関数があり、そっちに飛ぶと今度は500行の代物、
んで、その中で更にグローバル変数が多数あり、何が帰って
きてるのかまるでワカラン...

マ板でネタかと思ってたモノが現実に目の前にくると、
最初眩暈がした...マジで目の前がクラっとする瞬間って
あるんだなぁと関心した。

んでトドメはボトムに

Resume Next
731仕様書無しさん:2005/07/22(金) 15:46:34
warosu
732仕様書無しさん:2005/07/22(金) 18:26:08
>>730
> フォーム直下に3500行

フォーム直下って何だ?
733仕様書無しさん:2005/07/22(金) 19:25:25
これだからvb厨は
734仕様書無しさん:2005/07/22(金) 19:27:45
ソースは評価対象として小さい
735仕様書無しさん:2005/07/22(金) 19:35:18
>732
bas かなんかに切り出せボケってことだろ
736仕様書無しさん:2005/07/22(金) 19:38:35
VB厨のくせにビット演算なんか使ってやがるのを見るとうんざりしないか?
737仕様書無しさん:2005/07/22(金) 19:49:43
VBなんて基本的にどうでもいい
738 :2005/07/22(金) 20:48:41
VBやってるつうだけで、会社辞める理由になるだろ
739仕様書無しさん:2005/07/22(金) 22:01:04
確か車関係の会社で「VBしか使いません」つーマ募集があったなぁ・・・
システム部作ったばかりで何も分からんちんですって感じの説明だった。
740仕様書無しさん:2005/07/22(金) 22:16:42
>>736
人が、というか、言語的にはビット演算が効率的とは思えないと言うのはある。
むしろ、VBでビット演算する例なんかAPI呼び出しくらいでしか見かけないので
いわゆる典型的なVB厨が、ってよりはCあたりから飛ばされてきた半端者の方がそういうわけ分からないコード書くな。
741仕様書無しさん:2005/07/22(金) 23:06:51
>>736
VBでも頻繁にビット演算してると思うが。

MsgBox "削除してもよろしいですか?", vbYesNo Or vbDefaultButton2

とか。
742仕様書無しさん:2005/07/22(金) 23:45:44
それ、確かにOrが正しいんだが、
実はVB6以前だと+で書くのが本流だったりする。
(もちろんOrでも通るが)
743仕様書無しさん:2005/07/22(金) 23:54:21
WS_BORDER + WS_CAPTION とかやったりしてドツボにはまるわけですね。
744721:2005/07/23(土) 02:26:36
おおう、結構みんなnullチェックやってるのね……。
と、そいやリファクタリングにも「表明の導入」があったっけ。
一般的に有効なプラクティスみたいだし、
次の開発ではちょっと自分のコーディングを見直してみようかしらん。

というかそれ以前に>>718は別に事前条件の表明の問題じゃ無かったな。スマソ。

>>726
「引数にnullを渡した場合の動作は保証しません」とかの
意図を表明するのにassertを使うのは正しいことじゃないかなぁ。
JavaならAssertionError投げられるし。
まぁ「例外」じゃなくて「エラー」だけど、
どっちにしろあんまりcatchするモノでも無いだろうし。

あ、C系のassertをイメージしてるなら分かるかも。
745仕様書無しさん:2005/07/23(土) 09:21:53
>743
俺はそんなコードを C で見たことがある orz
746仕様書無しさん:2005/07/23(土) 11:36:55
>>744
>「引数にnullを渡した場合の動作は保証しません」とかの
>意図を表明するのにassertを使うのは正しいことじゃないかなぁ。

assertion のデフォは off
開発(保守)時に意図的に on にするもの
RuntimeException とは目的が違う
747仕様書無しさん:2005/07/23(土) 12:58:12
>>726
>assertは内部のprivateな実装の「想定外の」障害を検知するためのモンであって、
ちょっと違う。
「想定外」を検知するっつーのはそのとおりだが、それが「内部のprivateな実装」に
ついてかどうかは関係ない。
ライブラリのデバグ版とか見たことがないのか。
748仕様書無しさん:2005/07/23(土) 13:56:00
いやー普通
製品版でassertが出たらダメだろ

デバッグならいいけど
749仕様書無しさん:2005/07/24(日) 04:20:33
>製品版でassertが出たら
テスト不足!
750仕様書無しさん:2005/07/24(日) 07:09:27
assertを入力チェックに使うな、って入門書レベルの常識だと思うのだが。
744はほんとに職業プログラマなのかね?
751仕様書無しさん:2005/07/24(日) 13:07:20
製品版はReleasetビルドなんだからassertが出るわけないだろ。
752仕様書無しさん:2005/07/24(日) 18:29:10
>>750
入力には2種類ある。
誤りを受け入れるものと受け入れないものとだ。
受け入れるものについては、もちろんちゃんと(assertでなく)対処すべき。
しかし受け入れないものについては、それを表明するために(デバグ版で)assertする。
これが常識。

あんたのは常識じゃなくて、たんにいわゆる防御的プログラミングを
ポリシーにしてるだけじゃないのか。
753仕様書無しさん:2005/07/24(日) 21:36:16
>>752
同意

>たんにいわゆる防御的プログラミングを
>ポリシーにしてるだけ

本を読んだだけの学生さんとかがやりそうだよね・・・
754仕様書無しさん:2005/07/24(日) 21:48:24
errorとexceptionとassertの違いって何?
755仕様書無しさん:2005/07/24(日) 21:59:10
cppllの最近のログでも読んでみたら?
756仕様書無しさん:2005/07/24(日) 22:41:32
エラー・例外・表明
757仕様書無しさん:2005/07/25(月) 07:45:59
>752
いいよなー。
常に完璧なテストが行われる環境なんだな。
羨ましい。ほんとに。君はとても恵まれているよ。
758仕様書無しさん:2005/07/25(月) 10:11:20
>757
752じゃないけど、なんで?
759仕様書無しさん:2005/07/25(月) 10:19:22
>>757はちょっと頭がおかしそうだなw
760仕様書無しさん:2005/07/25(月) 12:06:36
>>757
752じゃないけど、完璧なテスト? 何を言いたいの?
761仕様書無しさん:2005/07/25(月) 18:28:04
>>757
752じゃないけど、お前バカだろ?
762仕様書無しさん:2005/07/25(月) 20:37:34
プログラマというのは、コミュニケーション能力に欠陥のある奴のなる職業だから気にするな。
763仕様書無しさん:2005/07/25(月) 20:46:57
そうそう。
コミュニケーション能力が欠けてて、SEになれなかったから仕方なくマになった
っていう奴がほとんどだもんな。
764仕様書無しさん:2005/07/25(月) 21:41:08
ModConst.basという標準モジュール

private const AAAAACDE=0
private const BBBBBCDE=1



private const XXXXXCDE=454

こんなんばっか
765仕様書無しさん:2005/07/25(月) 22:08:20
イイカンジに狂っとるな
766仕様書無しさん:2005/07/26(火) 02:59:43
assertの概念も理解できない>>757=750みたいな香具師でも
職業プログラマになれるんですね・・・
767仕様書無しさん:2005/07/26(火) 03:35:58
,j;;;;;j,. ---一、 `  ―--‐、_ l;;;;;;     所詮独学、アマチュアの俺は
 {;;;;;;ゝ T辷iフ i    f'辷jァ  !i;;;;;   職業プログラマの足元にも及ばないだろう
  ヾ;;;ハ    ノ       .::!lリ;;r゙  
   `Z;i   〈.,_..,.      ノ;;;;;;;;>  そんな風に考えていた時期が
   ,;ぇハ、 、_,.ー-、_',.    ,f゙: Y;;f     俺にもありました
   ~''戈ヽ   `二´    r'´:::. `!
768仕様書無しさん:2005/07/26(火) 03:57:29
学生やアマチュアに自信を持たせる750は偉い人
769仕様書無しさん:2005/07/26(火) 09:19:54
>>757 には胴衣できんが >>750 って「製品版で使うものじゃない」って
逝ってるだけだと思うのだがこんなに叩かれているのはなぜ?

結局 >>762 ってこと?
あっ!自作自演に釣られたのか?>漏れ
770仕様書無しさん:2005/07/26(火) 12:39:30
>758
受け入れられない場合にassertするということは
リリース版では受け入れられない場合にそのまま
受け入れちゃうということだろ。
完璧にテストが行われるならば、受け入れられない
場合が発生する可能性はすべてリリース前に潰されるから
そのコーディングでも全く問題ない。実行時
例外を考える必要が無い。楽そうだ。羨ましい。
771仕様書無しさん:2005/07/26(火) 13:03:44
>770
テスト漏れが考えられる場合は
>もちろんちゃんと(assertでなく)対処すべき。
になるんじゃないのかな。
何を持って、受け入れる場合/受け入れられない場合を判断するかは状況次第だと思うので、
それを抜きにして「受け入れられない場合」のことだけを抜き出して
そんな風に乱暴な言葉で罵ったっていいこと無いと思う。
772仕様書無しさん:2005/07/26(火) 13:13:25
最近はあまりないと思うけど、1バイトでもコード量を減らしたい場合に
入力チェックを省略してその代わりテストを完璧にする、ってのもあるかな?
773仕様書無しさん:2005/07/26(火) 13:18:32
>>772
よく意味がわからない
774仕様書無しさん:2005/07/26(火) 13:21:46
>>772
最近も昔も基本的に関数は仕様どおりに実装する。
テスト仕様は関数の仕様に基づいて設計される。
入力値のチェックをする・しないに関わらず、テストは完璧に行われる(←嘘)。

っていうか速度等の理由で「入力値のチェックをしない」という仕様は
ごくあたりまえに存在するわけで。有名どころでは std::vector の operator [] とか。
775仕様書無しさん:2005/07/26(火) 13:24:33
>>772
その逆の「入力チェックするからテストをいい加減にやる」ってこと自体あり得ないでそ。
時間がないからいい加減にやる、というのは良く有るけど。

速度等の理由で「入力値のチェックをしない」という仕様は最近でももちろん
ごくあたりまえに存在するし。有名どころでは std::vector の operator [] とか。
776仕様書無しさん:2005/07/26(火) 18:36:26
>っていうか速度等の理由で「入力値のチェックをしない」という仕様は
>ごくあたりまえに存在するわけで。有名どころでは std::vector の operator [] とか。

他にあるか?w
777仕様書無しさん:2005/07/26(火) 18:49:00
>>776
VC7 での std::string では、operator 〜 関連は
(恐らく)ほとんどが境界チェックをしていないようだね。
778752:2005/07/26(火) 20:52:02
>>769
>>750が非難され気味なのは、assertというものを理解しようとしていないからだろう。
問答無用にassert不要論を主張しているようにみえるからね。
たぶん冷静な>>771が正解。
779仕様書無しさん:2005/07/26(火) 20:56:48
>>776
あとはstd::dequeとかもたぶん。w

つか、STLのポリシーからいくとあんまり防御してないんじゃないか。
STLportはしてるみたいだけど。
780仕様書無しさん:2005/07/26(火) 21:01:55
vectorの場合はop[]がガードなしでat()がガード付きだった希ガス。
781仕様書無しさん:2005/07/26(火) 23:59:20
STLportはチェックするようにオプションで設定できるだけじゃないっけ?
実行時の効率や例外安全についても規格で決まってるから弄りようがない。
782仕様書無しさん:2005/07/27(水) 00:03:12
STLportはチェックするようにオプションで設定できるだけじゃないっけ?
実行時の効率や例外安全についても規格で決まってるから弄りようがない。
783仕様書無しさん:2005/07/27(水) 00:54:20
本番稼働コードにバグが残ってた場合に備え、
それを検出したら例外投げるコードは残しておくべきだ!という
主張は分からなくもないかな……と思いはじめてしまった>>744 == 私。

上位のフレームワークとかで予期しない例外を丸ごとcatch(Throwable)し、
バグを検出した部分だけ無効化してシステムから切り離すとか。
「すんませんバグ検出しました。[email protected]まで報告キボンヌ」とメッセージ出すとか。
このへんはassert使ってるとうまく出来ない……かな?
それとも、いっそリリース時にもassertをonにしておけばいいのか?

# どうでもいいけど>>774>>775が見事に同じこと言ってるのはなんでだろう。
784仕様書無しさん:2005/07/27(水) 01:23:57
二重カキコになっただけでしょ。

なんか重かったのか?そこら中で二重カキコ多発してんだがw
785仕様書無しさん:2005/07/27(水) 03:49:37
if (本番稼働でバグが残ってたらヤバい) {
  例外を throw & catch
}
else if (速度がクリティカルな要件ではない) {
  assert の行を残しとく
}
else {
  チェックなし・使用者責任
}
786仕様書無しさん:2005/07/27(水) 08:35:54
>>775
> その逆の「入力チェックするからテストをいい加減にやる」ってこと自体あり得ないでそ。
うむ。
つうかそれだと入力チェック自体が正しいことを保障できねぇw
787仕様書無しさん:2005/07/27(水) 14:17:46
750がド素人っていう結論が出たところで、次の話題どうぞ↓
788仕様書無しさん:2005/07/28(木) 00:12:08
素人っていうか、アサーションを理解できてないだけ
789仕様書無しさん:2005/07/28(木) 00:36:45
いいから次の話題どうぞ↓
790仕様書無しさん:2005/07/28(木) 00:49:57
               │↑
               └┘
               おらっしゃあぁぁ!!!
                ∩∧ ∧
                ヽ( ゚Д゚)
                  \⊂\
                   O-、 )〜
                     ∪
791仕様書無しさん:2005/07/28(木) 00:53:07
では早速。
別会社だが、納期に間に合わず夜逃げしたプログラマが書き残したコード。

if(a){
  if(b){
    if(c){
      xxxx
    }else{
      xxxx
    }
  }else{
    if(c){
      xxxx
    }else{
      xxxx
    }
  }
}else{
  if(b){
    if(c){
      xxxx
    }else{
      xxxx
    }
  }else{
    if(c){
      xxxx
    }else{
      xxxx
    }
  }
}
792仕様書無しさん:2005/07/28(木) 01:06:14
たかだか3重じゃないか。 まだまだ緩いな。
793仕様書無しさん:2005/07/28(木) 01:12:08
まさかとは思うが「まんま」じゃないよな?
794仕様書無しさん:2005/07/28(木) 01:31:03
>>791
決定表使えっつーシーンだな。
795仕様書無しさん:2005/07/28(木) 01:41:39
javaで3項演算子のこんな使い方があった。
boolean b = (x == 1) ? true : false;
796仕様書無しさん:2005/07/28(木) 02:12:03
っていうか、3項演算子とか使われてる時点で臭いと思う。
797仕様書無しさん:2005/07/28(木) 02:15:15
>>791
    if(c){
      xxxx
    }else{
      xxxx
    }

だけでいいって話?
それ、コピペだけして処理書き換えてないだけじゃねーの?
798仕様書無しさん:2005/07/28(木) 02:16:19
まぁ、書きかけのコード放置で逃げられたら本来の意味で辞めたくなるが。
799仕様書無しさん:2005/07/28(木) 02:54:09
>>797
いや、検索部分のコードなんだけど、入力値が3種類あって、それぞれを
使う・使わないで条件分けしてSQL文を8種類用意してたんだわそのプログラマ。
しかも長いのなんの。こっちまで夜逃げしたくなったよ。

条件式を' AND 'で挟むのにいい方法を思いつかなかったらしい。
コメントアウトの中にこれまた涙ぐましい努力の跡があった。
800仕様書無しさん:2005/07/28(木) 03:08:59
って書かれればコードなんぞ書かんでも分かるのに。
SQLの問題をCだかJavaだかの問題と勘違いしてるコミュニケーション不全と一緒じゃ逃げたくもなる罠。
801仕様書無しさん:2005/07/28(木) 03:12:32
RDBで2次元配列って扱えるか?
「テーブルから2次元配列で取ってきて・・・」って話だけで脳が逝きそうになった。
例でいうと、AAAテーブルんなかに A1, A2, A3, B1, B2, B3, C1, C2, C3, ... てな感じの列がずらっとあって・・・('A`)
802仕様書無しさん:2005/07/28(木) 03:24:44
CUBEとかPIVOTとか?
803仕様書無しさん:2005/07/28(木) 07:14:26
3項演算子ってだめなん?
boolじゃないけどC++で795風に変数宣言しつつ
値入れるときによくやってしまう orz
804仕様書無しさん:2005/07/28(木) 08:15:58
3項演算子の部分が40文字超えてくると嫌になってくる。
あとは2,3項目に副作用のある式があったりとか。一瞬悩む。
805仕様書無しさん:2005/07/28(木) 08:49:43
>804
胴衣。
同僚に通ぶってプログラム書く香具師がいて迷惑してる。
副作用を持つ式を3項演算子に入れるのは勘弁して欲しい。普通にif文使えよ。
2倍するところも、わざわざシフト演算子使わなくても、最近のコンパイラはちゃんと最適化してくれるから。
806仕様書無しさん:2005/07/28(木) 09:35:08
>>803
漏れも if よりコンパクト且つ副作用なく書ける場合なら使う
3項演算子ってだけで脊髄反射する宗教家もいるが要は使い方しだい
807仕様書無しさん:2005/07/28(木) 10:09:09
つーか795の場合、

boolean b = ( x == 1 );

でいいんでない?
808仕様書無しさん:2005/07/28(木) 10:52:36
ここで三項演算子をネストして使った事があるのを告白しておこうw
809仕様書無しさん:2005/07/28(木) 10:59:35
>>804-806
俺も同意だ!

a = cond ? foo : bar;
で済むものを
if( cond ) a = foo;
else a = bar;
にしろと言うのなら断る!>>796

>>808
if〜elseで書くよりも簡潔に書けるんであれば問題ないと思うけど?
810仕様書無しさん:2005/07/28(木) 11:12:17
>>808
変数に値を入れるだけのちょっとした条件分岐では常套だと思ってたが。
こんなんだろ?

x=A?p
 :B?q
 :C?r
 : s;

811仕様書無しさん:2005/07/28(木) 11:26:42
condA?(condB?a:b):(condC?d:e)
とか、さらなるネストとか
812仕様書無しさん:2005/07/28(木) 12:51:36
>>800
コード上で文字列の組み立てが出来なかったから3重条件分岐に
しちゃったわけで、SQLの問題だとは思えないが。

仮にどうしても条件分岐でSQL文を8種類用意しなきゃならん状況だとしても、
>>791のコードは有り得ないだろ。

あと、夜逃げしたのは全然知らない会社のプログラマ。
それでお得意さんが困っててなんとかしてくれって渡されたのが>>791
813仕様書無しさん:2005/07/28(木) 13:05:25
よく考えずにコーディング始めて、途中で思いついて継ぎ足していったって印象だな。
814795:2005/07/28(木) 19:15:43
俺が言いたかったのは>>807のことだったんだが。
3項演算子のネストなんか絶対使わない。即、代入のためだけに使う。
815仕様書無しさん:2005/07/28(木) 21:17:59
うろ覚えなので間違ってたらスマソ。

SELECT A.HOGE, B.HAGE FROM A, B WHERE A.ID = B.ID
UNION
SELECT A.HOGE, NULL FROM A WHERE NOT EXIST(
 SELECT * FROM B WHERE A.ID = B.ID
)

眺め始めてから3日目くらいに、この人は外部結合を知らないらしいと気づいた。

プロジェクトの終わり頃に、会社で使われているSQLチューニング用ソフトが、
最適化と称して外部結合をこんなふうにバラしてくれることを知った。
816仕様書無しさん:2005/07/28(木) 22:15:25
>>815
そのSQLを組んだ人は、実は外部結合を知っていたのに、
会社の最適化ソフトが外部結合をばらすから、あえて使わなかった。
というオチなのか?
817仕様書無しさん:2005/07/28(木) 22:59:41
>815
なんかそれ逆に効率悪そうだなぁ…。
Oracleだよね?
818仕様書無しさん:2005/07/29(金) 00:36:42
ぽすぐれはJOINの最適化効率良くないとは聞いたことあるが。
819815:2005/07/29(金) 01:32:33
>>817
Oracleっす。最適化ソフト、実行計画も一緒に表示できるけど、
全然改善されてなかった。
SQLもホントは一つのSELECTが1画面に収まらないくらいで、
それが4つか5つくらいUNIONされてますた……。
ちなみに受けた指令は
「これが今稼働中のシステムのSQLだから、
 ここから仕様を読み取って同じ意味になるようにJavaに移植して」
しかもビミョーに列の型とか意味とか違う。
820仕様書無しさん:2005/07/29(金) 01:40:29
>>816
その人が外部結合知ってたかは分からないんですが、
内部仕様書には同じSQLが載ってますた。
知ってたら、元のSQLはこうだけどツールで最適化したらこうなった、
くらい書いてあってもいいような。

「ツールに最適化させたらこうなったぞ。外部結合は使わないでこうする方がいいのか!」
なんて学習してませんように……。
821仕様書無しさん:2005/07/29(金) 08:05:51
そのツールなんてツール?
822仕様書無しさん:2005/07/29(金) 11:28:56
>>820

そんなまどろっこしいこと書くなよ。
同じ内容のことは一通りだけにしてくれ。
823仕様書無しさん:2005/07/29(金) 11:48:58
ソースの問題はソースで片付く
ソースの問題を放置する文化は現場や会社の問題
824仕様書無しさん:2005/07/29(金) 15:02:12
仕様変更くらいがちな関数の変更履歴

//変更点:疲れた[2005/xx/xx A]
//変更点:俺も[2005/xx/xx B]
//変更点:俺も[2005/xx/xx C]
//変更点:暑いね[2005/xx/xx A]
//変更点:そうですね[2005/xx/xx チーフ]
//変更点:仕様変更に対応。紆余曲折の末こうなりました[2005/xx/xx A]

消していいか
825仕様書無しさん:2005/07/29(金) 15:56:24
>>824
まぁ、それってバージョン管理として日付だけ残ってれば良いってだけなんだろうな。
そういうのはチームとかプロジェクトのノリにもよるだろ。

漏れもコミットする時にコメント付けないことのほうが多いのでどうこう言えん。
826仕様書無しさん:2005/07/29(金) 16:33:11
>>824
なんかなごんだ。
827仕様書無しさん:2005/07/29(金) 17:13:25
>>824
ユーザー側と仕様をネゴッた履歴などを記録した方が
後々に通りが良かったりする。
828仕様書無しさん:2005/07/29(金) 19:13:04
>>827
そりゃそうだけど。
記録方法がソースである必然性がわかりません
829仕様書無しさん:2005/07/29(金) 19:39:36
ソースは消えてなくならない管理がされている場合が多いから>>828
830仕様書無しさん:2005/07/29(金) 19:49:47
>>827
どういう経緯でその結論に至ったかって残して欲しい…
831仕様書無しさん:2005/07/30(土) 00:41:38
// TODO:fix me!
832仕様書無しさん:2005/07/30(土) 01:13:26
>831
それ、antか何かで見たなぁ、実際 orz
833仕様書無しさん:2005/07/30(土) 02:41:17
>>831,832
そういうときはXXXだ。
塩兄ちゃんもオススメ。
834仕様書無しさん:2005/07/30(土) 03:24:01
1.壊れたプログラムを直せ!なのか
2.壊れたプログラマを治せ!なのか
2だとしたらなんか感慨深いな。1だろうけど
835仕様書無しさん:2005/07/30(土) 21:22:37
汎用機で動かせるギリギリのサイズまで大きくなってしまったプログラムを改造。
仕様の要求自体、無茶だから仕方ないのだろうけど俺は始めてコンパイルで
”システムで動かせるプログラムサイズをオーバーしています”という意味のエラーコードを見た。
836仕様書無しさん:2005/07/30(土) 22:00:50
いったい何億行のコードだよそれ
837仕様書無しさん:2005/07/30(土) 23:23:29
分割するかなんかしろよって思うな。

メモリ空間の限界まで使いきってるってことか?
838仕様書無しさん:2005/07/31(日) 00:25:08
アドレス24ビットのOS/マシンなのかなあ
839仕様書無しさん:2005/07/31(日) 04:30:36
4104バイトだったりして
840仕様書無しさん:2005/07/31(日) 13:58:36
>>835
けど、デバッグ用にメモリを確保しようとしたら、
足らんくなる事はよくある。
とりあえず、チューニング汁。
841仕様書無しさん:2005/07/31(日) 15:03:11
>>840 エラーはコンパイルで起こるらしいから、それは関係ないだろ。
842仕様書無しさん:2005/07/31(日) 21:09:10
結局、後日プログラムが長過ぎて仕様変更できないので何本かに分割されました。
やっぱり無理があったか。
843仕様書無しさん:2005/08/01(月) 05:10:56
プロなら分割して書くのは当然と思っていたけど、ホントにそんなコードが存在するのにビックリ
844仕様書無しさん:2005/08/01(月) 07:52:35
最初の予定だとそこまでいかないハズだったんだよね。
しかし客がケチだったから、パソコンにまで対応するためにドンドン、プログラムが長くなっていった。
845仕様書無しさん:2005/08/01(月) 12:18:37
>>844
2行目の後半辺りから素人臭がするのは気のせいか。
846仕様書無しさん:2005/08/01(月) 23:05:29
━━━('A`)━━━・・・・・

private int l;
847仕様書無しさん:2005/08/01(月) 23:22:38
言語書け言語
848仕様書無しさん:2005/08/01(月) 23:46:46
多分JavaかC#。
で、lはインスタンス変数。
……グローバル変数でiとか宣言するのと変わらんセンスでつなorz
849仕様書無しさん:2005/08/01(月) 23:48:51
まあ汎用機の連中のすることだしな。
850仕様書無しさん:2005/08/02(火) 00:14:19
汎用機だったらいいんだけど
・・・どっちにしろ良くはないか
851仕様書無しさん:2005/08/02(火) 00:21:39
すまん、Javaだよ。

private int l;

public void test() {
// この中でも l を宣言して同様にカウンタとして使う
}
852仕様書無しさん:2005/08/02(火) 01:48:39
>>861 それはいったい何がやりたいのだ…
853仕様書無しさん:2005/08/02(火) 01:49:13
未来レスしてるしorz

×>>861
>>851
854仕様書無しさん:2005/08/02(火) 04:47:51
上の方で書いたのを忘れただけ。
855仕様書無しさん:2005/08/04(木) 10:05:37
>>848
まさに今 int i,x,y; がグローバル変数として宣言されているCソースをメンテしてる。
ローカルで十分な用途でしか使われて無いので大きな問題は無いけど...
.
856葉猫 ◆Jz.SaKuRaM :2005/08/04(木) 20:07:26
i,x,y がローカルでしか使われていないってどうやって検索ちたのでちょうか。。。

いいアイディアが浮かびまちぇん。。。
857仕様書無しさん:2005/08/04(木) 20:56:44
ひたすら追う
858仕様書無しさん:2005/08/04(木) 23:22:52
855がどうやったかは知らんが、
最近のIDEならグローバルで宣言してるとこ潰せば芋づる式に解析してくれるだろう。
で、使ってるとこので宣言文だけ頭に付けて値未定義の警告出なけりゃソース読まんでもそこはローカル宣言で十分ってことだべ。
859仕様書無しさん:2005/08/04(木) 23:55:24
int i;

int main()
{
  i = 0;
  hoge();
  printf("%d", i);
}

void hoge()
{
  i = 999;
}

このパターンは?
860仕様書無しさん:2005/08/05(金) 00:16:01
あー、それだとダメか。
861仕様書無しさん:2005/08/05(金) 14:32:01
たぶん関数とか使ってないんだろうな>十分にローカルな
862仕様書無しさん:2005/08/05(金) 14:37:11
\bi\bとかでひたすらgrepくらいしか思いつかない。
863仕様書無しさん:2005/08/05(金) 14:49:58
ソースの書かれ方にもよるが、
egrep -n "(^[a-z]|\bi\b|^{|^})" *.[ch]*
でダイジェストっぽいモノを作れれば多少は助けになるかもだ。
864仕様書無しさん:2005/08/05(金) 14:50:38
>>856
漏れならグローバルな方の宣言や定義をコメントアウトして
ビルドしてみる。
865仕様書無しさん:2005/08/05(金) 16:07:25
>>864
それもコード中に散らばってるという罠。
866仕様書無しさん:2005/08/06(土) 02:57:29
>864
externの存在とか忘れてない?
867855:2005/08/12(金) 07:58:48
非常に遅レスですが...
858 の書いた通りですよ。
もっともエラーになった関数はじっくりチェックして 859 の様なケースが無い事も
確認しますた。
868仕様書無しさん:2005/08/12(金) 22:37:23
新しい現場のソースコードを調べてみたら、
800ファイル15万行以上のソースの中に、インターフェイスが10個のみ。
その内7個は定数が定義されてるだけでメソッドが存在しない。
明らかにシグネチャが同じクラスも何も実装していないので、
ポリモーフィズムを実現するのにリフレクションを使わないといけない。

abstractでGREP検索したら3ファイルのみヒットした。
二つはインターフェイスなのにメソッドにabstractが付いていて、
一つはabstractメソッドが存在しなかった。

コメントとかはすごく丁寧に書かれているんで書いてる本人達は
いい仕事してるつもりだと思うが、定規と分度器で正確に書かれた
幼稚園児の落書きみたいなもんだ。
早く撤退させてくんないかな。
869仕様書無しさん:2005/08/12(金) 22:56:37
printf(" のーばでぃーnullpo ww ");
870仕様書無しさん:2005/08/12(金) 23:59:31
>>868
あのな、現場のソースはお前の遊び場じゃねぇんだよ
企業活動なんだから金になるかならないかなんだよ
そんな細かいこと気にしてんじゃないよ。

さっさと撤退した方がプロジェクトの為だな。
871仕様書無しさん:2005/08/13(土) 00:18:35
>そんな細かいこと気にしてんじゃないよ。

( ゚д゚)ポカーン
872仕様書無しさん:2005/08/13(土) 01:24:08
>>870
お前みたいな勉強しない三流PGは中国に仕事持ってかれて終わるぞ。
その前に引退しろよ。
873仕様書無しさん:2005/08/13(土) 02:05:24
>>868
java棒よ
abstractはなんとか意味かわかるが
インターフェイスは意味がわからないのだよ

java棒以外にも伝わるようにかいてくれないか
874仕様書無しさん:2005/08/13(土) 03:00:09
>>868
あんまりでかいシステム(でもって個々の機能はそんなに複雑でもない)システムだと
変に凝った事されるよりも「オブジェクト指向って何?」みたいなベタなコードの方が後のメンテナンスは楽だったりする事がある。
まー、要はWebシステムの事なんだけど。

っていうか、今雇ってる派遣の香具師が
全画面共通ならともかく1画面ごとにインターフェース定義したり、
明らかに1行で書ける処理を別クラスにしてたり(それによって他と共通化とか省力化ができてるというわけでもない。なぜなら画面ごとに別に作ってるからwwwっうぇw)、
voidで良いメソッドにthis返して1行でいくつもメソッドつなげて呼べるようにしてたり、
なんかもうわけわからんソースを書いてた事が判明して、
新人とかにバグ鳥やらせようにも不可能なので、技師の肩書き付いてるような奴ら駆り出してわざわざつまんねータグの打ち直しとか事やってる。

マジ辞めたい。
まぁ、辞めねーけどな。
875仕様書無しさん:2005/08/13(土) 06:16:33
>873
アセンブラ使いしか分からんコード、VB使いしか分からんコード、C++使いしか分からんコード。
そんなもんがスレにしか登場する事はまったく珍しい事じゃないわけだが。
分かった振りして放置するか、勉強しろ。
コード書きならC++、Java、VBは読める程度には知っておかないとヤバいと思うがな。
876仕様書無しさん:2005/08/13(土) 07:26:05
VBのこと全部忘れていいから代わりにJavaの知識あたまんなかにはいらねーかな
877仕様書無しさん:2005/08/13(土) 08:54:10
>>876
べんきょうしないと入るわけないじゃないか、のび太くん。
878葉猫 ◆Jz.SaKuRaM :2005/08/13(土) 17:52:38
昨日、ドラえもんに「アンキパン」という便利?なアイテムが登場ちていまちた。
879仕様書無しさん:2005/08/13(土) 17:59:24
そうでつかー
よかったでちゅねー
はいはい
880仕様書無しさん:2005/08/13(土) 18:31:32
PM「何でもいいからとにかく完成させてくれや」
881仕様書無しさん:2005/08/13(土) 21:32:56
>880
スレチガウ
この会社辞めようと思った腐れ上司の一言0x17
http://pc8.2ch.net/test/read.cgi/prog/1122801254/
882仕様書無しさん:2005/08/17(水) 14:39:29
>>876
VB.NETやれば勝手にJavaもできるようになると思うんだけど。
883仕様書無しさん:2005/08/17(水) 21:05:12
>>874
変に凝って作ると逆にメンテが難しいよな。
シンプルに書くのが一番だ
884仕様書無しさん:2005/08/17(水) 21:25:27
>>883
シンプルが一番なので関数はmainだけです。
885仕様書無しさん:2005/08/17(水) 21:29:59
ツマンネ
886仕様書無しさん:2005/08/19(金) 23:41:10
>>874
OOが悪いんじゃなくそいつがアフォなだけでは。
887仕様書無しさん:2005/08/20(土) 03:02:57
モチロンソウヨ
888仕様書無しさん:2005/08/20(土) 09:39:45
会社の英知が結集して開発したというシステムの中にあった、
数百行規模のwhileループがあちこちにあるPerlのコード
889仕様書無しさん:2005/08/20(土) 21:08:09
ソフト作ってる会社のくせにたかが、年賀状の住所印刷するプログラムのバグが何年も直らない。
株式会社ヤシマ
890仕様書無しさん:2005/08/21(日) 02:18:51
なぜか、std::dequeしか使わないウチの会社の技術者達。
(制御系で主にC++使用)

なぜそんなマイナーなコンテナにこだわるのかと
思っていたのだが、最近理由がわかった。

どうやら、約10年前に開発環境がCからVC++に移行したとき、
イベントキューを実装するためにdequeを使い始めて以来、
どんな用途にもdequeを使うようになったみたいだ。
std::vectorなど、他のコンテナの存在を知らないらしい。

技術者間の会話でも、「デキュ−が・・・」
「そこはデキューを使って云々・・・」など、
できゅーできゅー云ってて凄く打つになる orz
891仕様書無しさん:2005/08/21(日) 02:25:56
>>890
デフォルトを deque にしとくのは、実際のところそんなに悪くは無い。
vector では再確保の問題、 list ではランダムアクセス不可という
明らかな問題があるが、 deque ではそれらの問題がマイルドブレンドされている。
最適では無いが問題は起こりにくい。

たしかに「マイナーである」と言うのが明らかな問題と言えなくも無いが。
892仕様書無しさん:2005/08/21(日) 02:40:37
>>891
おお、こんな時間にレスありがとう。
確かにdequeは「明確な短所がない」ところが長所ですね。
でもウチの技術者達はそこまで考えてはいないと思う・・・。

>たしかに「マイナーである」と言うのが明らかな問題と言えなくも無いが。

それもそうだが既存コードのコピペがまかり通っていて、
「学ぶ意欲がない」のが一番の問題かも。
893葉猫 ◆Jz.SaKuRaM :2005/08/21(日) 03:29:45
制御系でC++使うのは革新的なのでちょうか、それとも認識が古い?

でもVC使うってことはWindowsCE or Mobile なのかな。。。
894仕様書無しさん:2005/08/21(日) 04:02:15
久しぶりだねキモコテ
895仕様書無しさん:2005/08/21(日) 04:57:13
>>893
OOらしい実装から better C としての用途まで
環境に合わせてどうにでも書けるのがC++のメリットなわけで。

>でもVC使うってことは
eVC ならそうだね。
896仕様書無しさん:2005/08/21(日) 06:49:15
deque知っててvectorもlistも知らないってすごいな。
dequeの使い方調べたらどうやってもそれらの存在に気づかざるを得ない気が。
897仕様書無しさん:2005/08/21(日) 09:31:08
>>891
ちなみに読み方はデキューじゃなくてデックが正解だね。
898仕様書無しさん:2005/08/21(日) 09:35:04
>>874
OOP - OOD = 糞コード

>っていうか、今雇ってる派遣の香具師が
コードレビューで指摘して直させれば?
・・コードレビューなんかする会社ならこんなところで愚痴らないか('A`)

899仕様書無しさん:2005/08/21(日) 09:46:07
>>891
ランダムアクセスはdequeもできないぞ

でも、俺もdeque大好き
件数が1000件、場合によっては1万とかなら
vectorはありえないんで、listかdequeになるんだけど、
追加削除が起きてもイテレータが失われないというメリットが必要なければdeque

その辺になると、双方向のポインタ分の容量も気になってくるし…
1万件でも80kbって対したことないんだろうけど、
RAM8kbの時代からプログラムやってるから、気になって仕方ない
900890:2005/08/21(日) 10:18:35
>>893 >>895
組み込みもやってますけど、この場合は
Windows NT系です。

>>897
本気でしらなかった・・・。
まわりがそう呼んでるから、そうなんだと・・・。
自分も同類だったわけか orz

deque=デック
dequeue=デキュー
おぼえました。
901仕様書無しさん:2005/08/21(日) 11:43:20
>>899
dequeはランダムアクセスできるよ。
vectorとdequeの使い分けを件数で語るのもよくわからん。
902仕様書無しさん:2005/08/21(日) 18:07:57
Borland C++3.0 あたりだったと思うが、クラスライブラリの説明書に
Deque: double ended queueの略でデックと読みます。
と書いてあった記憶がある。
903仕様書無しさん:2005/08/21(日) 21:02:33
MtGのデックと同じ意味だと思ってた。
904仕様書無しさん:2005/08/21(日) 23:08:06
> deque=デック
> dequeue=デキュー


ガ━━(゚Д゚;)━━ソ!
違いに気付いてなかったよ。読むときは何となくdequeueに脳内変換してた。
905仕様書無しさん:2005/08/21(日) 23:29:55
906仕様書無しさん:2005/08/22(月) 02:33:28
>>903
それはdeckだな。
カード一組という意味なので、トランプ52枚(+ジョーカーs)でも
そう呼ぶ。
907仕様書無しさん:2005/08/22(月) 02:34:41
dequeueは、キューから要素を除くという意味で使うね。
入れる方はenqueue。
908仕様書無しさん:2005/08/23(火) 00:18:33
入れるぜ
「え〜ん」
「きゅぅ〜っ」
909仕様書無しさん:2005/08/23(火) 11:32:16
>>908
...で?
910仕様書無しさん:2005/08/23(火) 23:26:46
初めて、queueって単語を見たときに「くえうえ?」と読んだのは内緒だ
911仕様書無しさん:2005/08/23(火) 23:54:33
>910
('A`)ナカーマ
912仕様書無しさん:2005/08/23(火) 23:56:42
お、お、俺だけかと思ってだば
913仕様書無しさん:2005/08/23(火) 23:58:43
おぉ。俺もデータ構造としてのキューはしってたがqueueはよめんかった。
914仕様書無しさん:2005/08/24(水) 01:00:19
何で読めないんだよ。。
915仕様書無しさん:2005/08/24(水) 01:01:50
queueはなぜか最初からちゃんと読めたが、
pseudoをずっと「ぷしゅーど」と言っていた過去を消してしまいたい。
916仕様書無しさん:2005/08/24(水) 07:20:19
queueって、なんでqueじゃいけないんだろう?
917仕様書無しさん:2005/08/24(水) 12:48:07
>>916
だったら、いっそのことQと表記すればと思う漏れ学生
918仕様書無しさん:2005/08/24(水) 13:21:28
いま何気なくBabylonでqueueを調べたんだが、弁髪っていう意味もあるそうだ。
よりによって弁髪かよ。
919仕様書無しさん:2005/08/24(水) 14:18:21
>>918
Q ← 弁髪を後ろから見た感じ
920仕様書無しさん:2005/08/24(水) 21:42:50
ワロス
921仕様書無しさん:2005/08/24(水) 21:44:46
なるほど
922仕様書無しさん:2005/08/24(水) 22:21:11
>>916
「qu」は「kw」の音を表す。だからqueだけだと「クウェ」とか「クィ」とかに読める。キューとは読みにくい。

>>918
> 弁髪っていう意味もあるそうだ。 
っていうか、そっちのが語源に近い。queueの語源は尾→結った髪→列
923仕様書無しさん:2005/08/24(水) 22:36:02
ポニテじゃなくて辮髪かよぉ
924仕様書無しさん:2005/08/25(木) 01:18:04
>>915
読めなかったので調べてみた。
knifeを「くないふ」って読むのと同じなわけね。
925仕様書無しさん:2005/08/25(木) 03:57:01
>>924
×:読む
○:書く

やっちまった・・・
926仕様書無しさん:2005/08/25(木) 09:43:07
前提として、iDatには整数値でセンチメートルの値が入る。これをいろいろ計算してから
結果を画面に表示するんだが、このとき、単位をメートルにするので、100で割って
小数点二桁まで表示、と仕様書には明記してある。

int iDat;
double dDat;

char cStr[256];

sprintf( cStr, iDat / 100, "%.2f" );
dDat = atof( cStr );


全ソースにわたってこんな具合。
しかもcStrは一度も初期化してない。
もう見直すの疲れたよママン・・・・

927仕様書無しさん:2005/08/25(木) 09:47:24
cStrの初期化必須って考え方が古いよ
928仕様書無しさん:2005/08/25(木) 09:48:08
プラットフォームが古いOSなのでわ
929仕様書無しさん:2005/08/25(木) 10:00:09
そういう問題ではないのでわ
930仕様書無しさん:2005/08/25(木) 10:36:30
辞めようと思うほどじゃないな。

元制作者を絞めたくはなるがw
931仕様書無しさん:2005/08/25(木) 10:37:54
寧ろ、>>926 の sprintf の前に memset(cStr, 0, sizeof cStr) なんか
してたら莫迦。
932仕様書無しさん:2005/08/25(木) 10:49:49
>>931
そういうコードは良く見かけるけどねw
初期化欠落に起因するバグを避けるために全ての変数を初期化しなければならない
という強迫観念に取りつかれている人がまだまだ多いようで
933仕様書無しさん:2005/08/25(木) 12:08:45
sprintf( cStr, iDat / 100, "%.2f" );
ってコンパイルとおるか?
934仕様書無しさん:2005/08/25(木) 12:10:10
>>933
#include <stdio.h> してなけれりゃ、通るんじゃね?
935仕様書無しさん:2005/08/25(木) 16:07:04
ところで

sprintf(cStr,"%.2f",(float)iDat/100.0);
sprintf(cStr,"%d.%02d",iDat/100,iDat%100);

どっちが好き?
936仕様書無しさん:2005/08/25(木) 17:20:55
>>935
好きっていうか、動作違うんじゃない?
937仕様書無しさん:2005/08/25(木) 17:49:30
結果として得られる文字列は同じだね
でも普通に考えたら前者だよな
938仕様書無しさん:2005/08/25(木) 18:59:10
後者は完全に固定小数点として扱ってて誤差が無いって意図なんではないかと。
939仕様書無しさん:2005/08/25(木) 19:14:59
>>937
double の仮数部が 52bit で iDat がたぶん高々32bit位だとするなら、
sprintfの表示桁に丸める処理の実装具合によっては、同じ文字列が
得られるかも知れないけど、

そんなこと検証したりテストしたりしたくないし、普通は後者にすると思う。
940仕様書無しさん:2005/08/25(木) 22:55:23
この場合、有効数字が全部残るのがわかってるわけだから、
十進と二進の誤差があったとしてもきっちり理論値に丸まるはずじゃない?
%fって四捨五入だろ?
941仕様書無しさん:2005/08/26(金) 04:46:45
>>940
なんで分かるの?
942仕様書無しさん:2005/08/26(金) 05:36:15
どちらかというと、十進やら二進やらの誤差よりも、
iDatをfloatに変換するときの精度落ちの方が気になるかな。
floatの仮数部は実質24ビット分しかないわけで。
iDatって多分32ビット符号付き整数でしょ?

仮に(float)iDatを(double)iDatに読み替えて、誤差の計算をしてみる。
(double)iDatと100.0を2進小数に落とし込むところでは誤差0。
除算は計算結果の丸め(多分四捨五入)による誤差しか発生しない筈なので、
誤差は"2^(計算結果の指数部-54)"ぐらい。
で、計算結果の指数部ってのはiDat == -2^31の時に最大となり、
その値は25あたり。
だからこの段階での最大の誤差は2^-29 ≒ 0.000000002程度。
2進→10進小数変換は、計算方法にも依るけど誤差なしなので、誤差は変わらず0.000000002程度。
(double)iDat/100.0の正確な値は0.01刻みで変化するので、
四捨五入されても多分余裕で大丈夫。あんまり自信ないけど。

まあ、こんな計算してまで確かめるくらいなら俺は後者の書き方をするかも。
943仕様書無しさん:2005/08/26(金) 06:41:23
クミコで3MHzの石という理由で後者を選びます。前者は論外。
除算が2度あるのも気になるところ。div関数の結果をそこに書けばintが2つpushされるので
除算が1度で済みます。
944仕様書無しさん:2005/08/26(金) 10:00:43
>>941
分かるも何も、floatの有効桁が3桁の実装なんて存在しないだろ。
945仕様書無しさん:2005/08/26(金) 13:39:59
cmで計算してmに直す、なんてことを言ってる値が
16ビット以上あるとも考えにくいな
946仕様書無しさん:2005/08/26(金) 23:25:23
整数値を実数化して100で割ったら0.01以上の誤差が発生する
のは何桁以上の整数なのかを考えなよ
947仕様書無しさん:2005/08/26(金) 23:47:03
だからそんなに計算誤差を気にするんならCOB(ry
948仕様書無しさん:2005/08/26(金) 23:49:06
>>947
CO(ryって実数演算できるの?
949仕様書無しさん:2005/08/27(土) 00:12:48
>CO(ry で実数演算
実数つーか、計算自体は整数としてやっといて、出力時に「ここ小数点はいる」ってやるだけだが。
速度その他を考えると分からんが、できんもんでもないんじゃ。
もちろん、できるからといって適しているとはかg(ry
950仕様書無しさん:2005/08/27(土) 02:57:59
インラインアセンブリ入れればPentiumの十進整数命令が使えるんじゃないかな。
951仕様書無しさん:2005/08/27(土) 11:06:26
いつだったかfloatで7だか9だかを表示しようとしたら
6だか8になって以来double使うことにしてる。
952仕様書無しさん:2005/08/27(土) 13:22:05
>>951
くやしく
953仕様書無しさん:2005/08/27(土) 14:14:50
>>952
floatの代わりにdoubleを使えば誤差のことは考えなくて済むってこと。
954仕様書無しさん:2005/08/27(土) 15:28:47
済むわけないだろ。
955952:2005/08/27(土) 16:19:39
>>953のいいたいことも
>>954のいいたいこともわかるが、
なんで7とか9とかが6とか8とかになるわけ?
956仕様書無しさん:2005/08/27(土) 20:21:49
マルチスレッドプログラムでも、volatileさえ使っていれば完璧です。
957仕様書無しさん:2005/08/27(土) 22:38:08
単にintに代入して切り捨てられたという話だな
958仕様書無しさん:2005/08/28(日) 05:23:32
>>956
恵比寿キタ━━━(・∀・)━━━!!
959仕様書無しさん:2005/08/28(日) 12:21:28
>>951ではないが、

#include<stdio.h>

main(){
 float a;
 int count;
 for(count = 0; count < 70; count++) a += 0.1;
 printf("%d\n", (int)a);
}

% cc test.c && ./a.out
5
%

6どころか5になっちまった。
960葉猫 ◆Jz.SaKuRaM :2005/08/28(日) 12:39:04
>>95
aの初期化ちてないからでちょ。。。
VCだとちゃんと6になるよ
961仕様書無しさん:2005/08/28(日) 12:40:58
>>960
ぎゃーホントだ。すまねえ。初期化してやりなおしてみたら俺もちゃんと6になった。
「ちゃんと」ってのも変な話だが。
962仕様書無しさん:2005/08/28(日) 13:18:47
>959-961
ちょうどタイムリーにこんなネタを見つけた。
ttp://hw001.gate01.com/eggplant/tcf/cpp/floatprecision.html
963仕様書無しさん:2005/08/28(日) 17:22:17
なんつうか、結局Cって糞だな。
964仕様書無しさん:2005/08/28(日) 18:47:50
なんつうか、結局963って糞だな。
965仕様書無しさん:2005/08/30(火) 00:15:38
浮動小数点の誤差の研究はいろいろ文献があったなぁ。
いずれにせよスレ違いだが.......。

966仕様書無しさん:2005/08/30(火) 00:20:22
そうか・・・議論がかみ合ってなかったんだね>浮動小数点の誤差の研究
967仕様書無しさん:2005/08/30(火) 19:52:20
968仕様書無しさん:2005/08/30(火) 20:14:54
マルチポストしすぎ
969仕様書無しさん:2005/08/30(火) 22:47:35
データクラスのインスタンス変数が皆Public
そのくせgettersetterがある
さらに別のファイルにも同じ名のグローバル変数がある
さらに別のファイルにgettersetterがあり
setterで↑のグローバル変数に↑↑のgetterで取ってきた値を入れて
getterで↑↑のグローバル変数参照
970仕様書無しさん:2005/08/30(火) 23:31:23
>969
わけがわかりません
971仕様書無しさん:2005/08/31(水) 01:00:28
それは心の病気だ。
972仕様書無しさん:2005/09/03(土) 16:30:16
どうどうとSTL使えるだけ羨ましいな
今度の派遣先、MFCのコンテナだらけ。CPtrList, CArray, CList, CMap _| ̄|○

俺「なんでここではSTL使わないんですか?」
プ「STLって何?」
俺「え?」
973仕様書無しさん:2005/09/03(土) 16:41:44
MFCか。もう、何もかもが懐かしい……。
974仕様書無しさん:2005/09/03(土) 17:55:14
MFCよ!! 973は帰って来た!!
975葉猫 ◆Jz.SaKuRaM :2005/09/03(土) 18:52:42
MFCなど邪道
976仕様書無しさん:2005/09/03(土) 20:05:49
糞コテなど邪道
977仕様書無しさん:2005/09/03(土) 22:59:38
MFC
My Favorite C
978仕様書無しさん:2005/09/04(日) 03:41:21
979仕様書無しさん:2005/09/04(日) 12:46:54
最近はboost使ってもいいところあるけどなぁ。
980仕様書無しさん:2005/09/04(日) 16:36:11
やぱーりCodeCompleteは必読書ですかね?
981仕様書無しさん:2005/09/04(日) 16:47:10
>>980
自己流のみより百倍マシ。とはいえ、読むべき人ほど読まないジレンマ
982仕様書無しさん:2005/09/04(日) 17:39:49
それジレンマじゃなくて悲しい現実って言うんだよ。
983仕様書無しさん:2005/09/04(日) 18:26:41
使う側の意見だろ>ジレンマ
984仕様書無しさん:2005/09/04(日) 18:30:43
>>983
とは言うものの、使う側が買い与える訳でもない罠。
985仕様書無しさん:2005/09/04(日) 19:52:06
プログラミングの本って漫画よりずっと面白いと思うんだけど
なんで読まない奴が多いんだろうね。
986仕様書無しさん:2005/09/04(日) 20:25:13
絵が無いからでしょ。
987仕様書無しさん:2005/09/04(日) 20:43:02
>>984
自己投資は自分のお金でね。
生き残ったら使い続けてやるよ。


ってのが雇っている側の理論なんだろうorz
988仕様書無しさん:2005/09/04(日) 21:13:10
>980
訳書新版はとうとう2分冊ですよ旦那。
989仕様書無しさん:2005/09/05(月) 02:09:06
立ち読みした感じ、買って読むほどのことが書いてないと思ったのだが。
それだけ世間に浸透させたってことで旧版の功績か? >CodeComplete
990仕様書無しさん
int main(void){
  return func1();
}