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

このエントリーをはてなブックマークに追加
1ぬるぽ
この会社辞めようと思ったソースコード。
プログラマとして幻滅するソースコード。
プログラマを悩ませるソースコード。
ぬるぽが発生するソースコード。
COBOL ライクなソースコード。(゚д゚)マズー
をつらつらと綴っていって頂戴。

ちなみにここは質問スレじゃないよ。
技術的な質問がしたいならム板に逝って。

■過去スレ
この会社辞めようと思ったソースコード
#1http://mentai.2ch.net/prog/kako/997/997104873.html
#2http://pc.2ch.net/prog/kako/1001/10010/1001076034.html
#3http://pc.2ch.net/prog/kako/1015/10158/1015861447.html
#4http://pc.2ch.net/prog/kako/1021/10215/1021560641.html
#5http://pc.2ch.net/prog/kako/1029/10291/1029120005.html
#6http://pc.2ch.net/prog/kako/1029/10291/1029120005.html
#7http://pc.2ch.net/prog/kako/1036/10367/1036779521.html
#8http://pc.2ch.net/test/read.cgi/prog/1040451049/

■関連スレ
この会社辞めようと思った上司の一言#7
http://pc.2ch.net/test/read.cgi/prog/1040889506/l50
NullPointerExceptionを「ぬるぽ」と呼ぶスレ3
http://pc.2ch.net/test/read.cgi/prog/1045323654/l50
2仕様書無しさん:03/02/16 22:16
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>1
3仕様書無しさん:03/02/16 22:17
1-2を書きたくてスレを立てた
4仕様書無しさん:03/02/16 22:20
otsu
5仕様書無しさん:03/02/16 22:25
無駄スレたてんな。
速攻で削除依頼だしとけよ。
6仕様書無しさん:03/02/16 22:27
さっき、会社で眺めてたコード。

void main(int argc, char *argv[])
{
    for(;;){
        funcA();
        funcB();
        :
        (略)
        :
        funcM();
        break;
    }
    funcN();
}

ヲイ、そのforループは、いったい何のためにあるんだ!?
7仕様書無しさん:03/02/16 22:28
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←http://pc.2ch.net/test/read.cgi/prog/1040451049/999


>>5
無駄スレなのか?
8仕様書無しさん:03/02/16 22:29
>>6
きっと、昔はちゃんとループになってたんだよ。
そう思っておこうよ。
9ヽ(´ー`)ノ:03/02/16 22:29
http://pc.2ch.net/test/read.cgi/prog/1040889506/638 から来たよ。
宣伝してくれた人、多謝。

>>5 定番スレだし無駄じゃないと思われ。
10仕様書無しさん:03/02/16 22:29
>>6
途中にcontinueがはいってるだろ。よく読めよ。
11仕様書無しさん:03/02/16 22:36
で、>>5 の犯行動機は?
12仕様書無しさん:03/02/16 22:48
>>11
さびしかったんだ。
13仕様書無しさん:03/02/16 22:48
/* ディレクトリサーチ */

system("ls -F >ls.tmp");
fp = fopen("ls.tmp", "r");
while (fgets(buf, sizeof buf, fp) != NULL) {
 if (buf[strlen(buf) - 1] == '\n') {
  buf[strlen(buf) - 1] = '\0';
 }
 if (buf[strlen(buf) - 1] == '/') {
  chdir(buf);
  system("ls -F >ls2.tmp");
  fp2 = fopen("ls2.tmp", "r");
  while (fgets(buf2, sizeof buf2, fp2) != NULL) {
   if (buf2[strlen(buf2) - 1] == '\n') {
    buf2[strlen(buf2) - 1] = '\0';
   }
   if (buf2[strlen(buf2) - 1] == '/') {
    /* 延々と続く */
   }
  }
  fclose(fp2);
  rmdir(ls2.tmp);
  chdir("..");
 }
}
fclose(fp);
rmdir(ls.tmp);
14仕様書無しさん:03/02/16 22:49
情状酌量で執行猶予つきという事か
15ヽ(´ー`)ノ:03/02/16 23:08
>>13
popenぐらい教えとかないとダメじゃないですか(違
16仕様書無しさん:03/02/16 23:11
>6
昔、Cマガで、
「昔はgotoは嫌いだから、代わりにfor(;;;)とbreak使ってたYO」
みたいな話を見た記憶が
17仕様書無しさん:03/02/16 23:22
>>13
結構このコード妙な味わいがあって好きかも...(w
で、何段ぐらいディレクトリを降りてくれるの?
18仕様書無しさん:03/02/16 23:24
goto禁止令でてるので
do{...}while(0)とかつかっちゃってます
19仕様書無しさん:03/02/17 00:21
char buf[256];
int pointer;

for (pointer = 0; pointer < 256; pointer++) {
 c = buf[pointer];
 // 処理がつづく
}

ポインタちゃうだろ!先輩しっかりしてください!
20仕様書無しさん:03/02/17 00:25
>>19
ポインタ=「指し示すもの」という意味ではあってるよ。
21仕様書無しさん:03/02/17 00:42
このばあいはカーソルのほうがしっくり来る気がする。
22仕様書無しさん:03/02/17 00:45
indexじゃないの?
23仕様書無しさん:03/02/17 01:25
>>18
gotoよりましだが・・・
ちゃんと処理見直してまともなコードに汁
24仕様書無しさん:03/02/17 02:13
DOSの頃は0番地書き込もうとするとデータセグメントの先頭アドレスへ書き込んでいたような気がするんだが、今はどうなんだろー。
25仕様書無しさん:03/02/17 02:22
>>24
DOS の頃に対しての今って何よ?
26仕様書無しさん:03/02/17 07:15
>18
私の所、開発言語はCなんですが、規則で、goto, continue, 途中でreturn, が禁止されています。

そのせいで、深いネストのif, 満艦飾のフラグ, エラー処理は随所にコピー&ペースト, のコードが大量生産されています。
変数の命名規則もすごいことになっていて、ソースが読みにくくてたまらんです。
その割にグローバル変数にはコメントがなかったりして。

開発規則ってなんでああやって当初の目的から乖離していくんでしょうね。
27仕様書無しさん:03/02/17 08:41
>>26
偉い人の中で一番出来の悪い奴に合わせるからじゃない?
28仕様書無しさん:03/02/17 09:22
深いネストのifやフラグ、大量のコピペ等の大半は、
そのコーディング規約がなくても存在したのでは?と想像してみる。



ひとつの関数が1000行とか有ったりするだろ?お前の会社のソース。
29仕様書無しさん:03/02/17 10:28
>>28
26の言う途中でreturnってのがよくわからないんだが、
もしもこれが「関数の途中でreturnしてはいけない」というだけの
とんでもないものだったとしたら、
関数の途中で処理を抜け出したい場合(つまり途中でreturn)、
関数を呼び出し元の関数の中に展開して
その中でループをbreakするなりなんなりの実装をしなきゃいけない。
フラグを使うってのもその辺から生まれてくるかも。
全部が全部そうなるとは思えないけど、
ソースは汚くなりそうだよ。

グローバル変数にコメントが無かったりする、
深いネストのifが発生するってのは腕次第で何とかなると思うな。
30仕様書無しさん:03/02/17 10:43
>>29
> その中でループをbreakするなりなんなりの実装をしなきゃいけない。

いや、>>26が書いていることから想像するに、ループからのbreakも禁止なんだろう。
その辺からifの深いネストやコピペの散在になるんじゃないの?
31仕様書無しさん:03/02/17 10:45
>>26
ひょっとしてexit()も禁止とか・・・だとしたらガクブルもんですな。
32仕様書無しさん:03/02/17 11:06
>>29
> 関数を呼び出し元の関数の中に展開して
> その中でループをbreakするなりなんなりの実装をしなきゃいけない。

この発想はすごい。
33仕様書無しさん:03/02/17 17:45
>>26
gotoはアレルギーのある人いそうだけど…

ごちゃごちゃになった関数を、continue、途中でreturnを使って
すっきり書き直してどっちがいいですかと訴えてみたらどう?
変なフラグとか条件判断とかなくなるからものによっては
行数で半分くらいになったりしないか?
34仕様書無しさん:03/02/17 18:44
>>26
それは「規則」の問題じゃなく「人間」の問題だろ、やっぱり。
そういう間抜けな規則に馬鹿正直に従って糞コードを量産する奴らが
問題。規則を疑問視したり問題提起したりということがしにくい職場
ならそれもまた問題。
「間抜けな規則」の存在は単なる氷山の一角に過ぎないよ。
35仕様書無しさん:03/02/17 18:54
漏れも途中 return は嫌い。メモリ解放のし忘れとかのバグを出しまくった後、
「やっぱり関数の出口は一つにした方がイイ!!」という結論に達した。

おかげでインデントは深い。昔、横80桁のモニタを使っていた頃は、そうでも
無かったのだが、最近のWindowsで広い画面(1600x1200)とかで使ってると、
インデントはどんどん深くなる。10段とか……。この前気になって調べてみたら、
最高14段だった。
書いてる本人は、特にわかりにくいとは思わない(自分で書いてるんだから、当た
り前)のだが、社内では、すこぶる評判が悪い。

多分、漏れのコードを見て、何人か辞めたと思う。
36仕様書無しさん:03/02/17 19:09
>>35
何で関数分けないの?
37仕様書無しさん:03/02/17 19:33
try〜catch つかへ>>26
38仕様書無しさん:03/02/17 19:41
>>37
C
39仕様書無しさん:03/02/17 20:07
>>35
そういうときこそgotoの出番なんだがなあ。
40仕様書無しさん:03/02/17 20:20
一つの関数に一つのreturnってのは、
構造化プログラミングの最初期に盛り込まれていた規則だったと思う。
その後、>>33みたいに可読性を重視する人間が現れて、
必ずしも守らなくていい規則に変わったはず。そう記憶している。

ので、これはもはや宗教論争ではないかと。
41仕様書無しさん:03/02/17 22:48
>>35
C++だったら「デストラクタを使え」というところだが…
42仕様書無しさん:03/02/18 00:02
流れをぶったぎり、しかもソースコードじゃなくてスマソだが。
いま唐突に10年前の出来事を思い出したので書くぞ!
そのころ自分はC使いで、見よう見まねでデータ中心設計のようなやり方を
始めていた。変数のスコープはなるべく1ソースファイルに収まるよう
心がけ、各ソース間のデータフローを書いて、すっきり見える構造を模索した。
一人かせいぜい二人で作るシステムが多かったので、誰も導いてくれない
かわり、そうやって好きにやれる部分もあった。

本からヒントを得て、ほとんどすべてのソースにテスト用のメイン関数を
書いておいた。
単体でビルドして、ソース内の各関数をテストできる。当たり前の方法かも
しれないが、process_1(),process_2(),…process_20()なんて命名が
まかり通る社にいた自分には、なんてインテリジェントな作法だ!と感動さえ
湧いたものだった。
もちろん、テスト用メインは普段はコメントにしておく。(リンカ通らないしな)

あるとき、システム完成間近の時期に、1年先輩の人の手を借りることに
なった。
どういう形で手伝ってもらったか詳しくは覚えていないのだが、とにかく
二三日したある日、先輩がニコニコして言った一言。

「コメントになってるとこ、全部削っておいたからね♪」

そ れ は 要 ら な い か ら コ メ ン ト に し た ん じ ゃ な い で す。

と、最初に言わなかった自分が悪いんだろうきっと。しかしあんたも
プログラマなら、コードを見て少しは察してくれませんか。
process_20()を見ても辞めようと思わなかった自分だが、このときは
この人の後輩でいなければならないその会社を飛び出たくなった。
43仕様書無しさん:03/02/18 00:06
>>42
・・・・(-∧-;) ナムナム
44仕様書無しさん:03/02/18 00:18
>>42
イジメ...だな。
45仕様書無しさん:03/02/18 00:20
出る杭は打たれる。才能のある奴は足を引っ張られる。口のうまい奴は出世する。
4642:03/02/18 00:32
>>44
いや、書き方が悪かったかもしれないが、先輩のニコニコは混じりけない
親切心に満ちていた。
むしろそれがイジメになると気づくくらいであってほしかった…

ちなみにその会社はその後数年で潰れ、自分は社員数こそ少ないが
はるかに居心地のいい社に移れました。
例の先輩は異業種に行ったそうだ(´∀`)
47仕様書無しさん:03/02/18 01:26
>26
 そもそもループの制御構文である continue, break と、無条件ジャンプの goto を同
一視する時点で大きく間違いだと思うんだが……

 構造化の結果として必要となったのが continue, break であるわけで、これを使うな
ってのは構造化をするな、っていうことになりはしないのだろうか?
48仕様書無しさん:03/02/18 01:45
ろんぐじゃーーーんぷ!!
49仕様書無しさん:03/02/18 02:14
setjmp()すんの忘れてた〜!
50仕様書無しさん:03/02/18 02:28
> 47
あのー、多重ループの中からエラー処理するときどうやってんですか?
51仕様書無しさん:03/02/18 02:34
>>50
47ジャ内が・・・
適宜関数化してリターン。
もしくは、多重ループをちゃんと論理展開して・・・
52!47:03/02/18 02:35
>>50
やった事ないからわからん。
今の会社に入ってからは、単なるCは使ってないし。
53仕様書無しさん:03/02/18 02:58
>>42
コメントにしないでたとえば、

#ifdef UNIT_TEST
#endif

なんかでくくっておけばよかったかもな。
その変な先輩とやらも意味がわからないだろうから手をつけないだろうし(w
5450:03/02/18 03:15
すんません、書き間違いました。
多重ループからエラーで抜けるには云々は、35に書きたかったことでした。

42には、無条件ジャンプなんかより、無条件goto排斥派のほうが問題だよな、などと書くつもりでした。
>51
そういうときはgotoでいいと思うんだけ、だめ?
gotoを使わないがために面倒なコード書くのって本末転倒のような気がするんだけど。
55仕様書無しさん:03/02/18 03:27
>>54
gotoでいいんだけども、goto許しちゃうと変なところで使いまくる馬鹿がいるのよなあ…
おれは今ではフリーだが、かつて会社員だったときに新入社員の
後輩どもには「gotoは、おれは使うがおまえらは使っちゃいかんぞ」
と教育してた。もちろん、時期を見計らって「こういうときにだけgotoを使え」と教えてた。
5651:03/02/18 03:51
>>54
gotoが入るようなソースが綺麗だとは思わん。
ちゃんと関数化したほうが書きやすいし読みやすいぞ。

…goto回避のためにフラグ使って読みづらいコード書くやつは論外(w

十数年C/C++使ってるがgoto使わないといけなかった場面なんて
片手で数えられるほどだったが?
57仕様書無しさん:03/02/18 03:53
goto回避のためにやたらめったら関数化して外に放り出してしまい
極端に可読性悪くなったソースってのも見たことある
58仕様書無しさん:03/02/18 04:28
>>56
その片手で数えられる場面ってのは何よ。
世の中にはそれを主に仕事している人もいるのでは?
gotoは適材適所だろ。
59仕様書無しさん:03/02/18 09:28
>56
そのソースが読みやすいと思うのはあんただけかモナー
60仕様書無しさん:03/02/18 11:22
わかった! >>26の会社はHaskell使ってると見たね。
だからgotoだのcontinueだの途中でreturnだのは許されないんだ。
Cだと思ってるのは>>26の勘違いだろ。l
61仕様書無しさん:03/02/18 12:11
goto使わないかわりに同じ関数の中でsetjmp/longjmp使うのって、どう?
・見づらいし
・必要以上に遅い(やらなくてもいいレジスタ退避とか)し
なかなか愉快そうじゃん?
62仕様書無しさん:03/02/18 12:51
gotoの話題が出ているので、wrapされたgotoをば。

#define throws(T) T exception;
#define throw(x) do{ exception=(x); goto catch_node; }while(0)
#define try if(1)
#define catch else catch_node:

// 使用例
int main( int argc, char** argv ) {
  throws(int);
  try {
    if( argc < 2 )
      throw( argc );
    printf("# %s\n", argv[1]);
  } catch {
    printf("catch Exception [%d]\n",exception);
  }
  return 0;
}

// 一見例外のように見えて、実はただのgoto。
63仕様書無しさん:03/02/18 15:47
>>62
みごとだ。
会社辞めたくなる。
6450:03/02/18 15:59
for(i=0; i<N; i++)
 for(j=0; j<M; j++)
  if(function(i,j)==ERRCODE)
   goto ERRRRR;
...
ERRRRR:

ってのは51はどう書いているの?
65:03/02/18 16:03
66仕様書無しさん:03/02/18 16:36
>>62
昔はC++をCにコンバートしてたと聞くが、こんなCコードでも吐いてたのかな。
67仕様書無しさん:03/02/18 17:50
C++をCに変換してコンパイルしてた頃( Release 1.0の頃 )は、
まだ例外とか名前空間は言語仕様に含まれていませんでしたよ、確か。
68仕様書無しさん:03/02/18 22:36
goto禁止は困るんだが、許すと訳分からん使い方する奴が出るからなぁ…
いっそ自動二輪のように「goto解除」免許ある奴だけ許可とか(w
6947:03/02/18 23:34
>50
 フラグと while / repeat を使った書換で対応、かな。
 基本的にはループの途中でキャンセル、ってのはあまり for ループでは使わんからなあ。

 漏れが PASCAL 使いであることも原因かもしれんが。
(PASCAL では for は「回数の決まったループ」という考え方だから)
70仕様書無しさん:03/02/19 00:14
for( i = 0; i < N && ! IsContinueable( context ) ; i++ )
  for( j = 0; j < M && IsContinueable( context ); j++ )
    context -> error_code = func( i, j );
if( IsError( context ) ) {
  // Error処理
}
7170:03/02/19 00:19
へんな ! とかは気にしないで。

つか、漏れのコードはマジでこんな感じ。
72仕様書無しさん:03/02/19 00:21
>>70
会社辞めたくなったソースコード
ですか?
73仕様書無しさん:03/02/19 00:44
あ...ううん、64のコードを、gotoなしで書いてみたの。
74仕様書無しさん:03/02/19 02:02
goto嫌い=N88Basic世代?
7551じゃないけど:03/02/19 02:03
>>64
/* 妥協案1 */
for( i=0; i<N; ++i )
 for( j=0; j<M; ++j )
  if( function( i, j )==ERRCODE )
  {
   i=N; // 一番内側のループカウンタ以外最大値に
   break;
  }

if( j<M ) //一番内側のループカウンタで判断
{
 /* エラー処理 */
}


/* 妥協案2 */
for( i=0; i<M*N; ++i )
 if( function( i/M, i%M )==ERRCODE )
  break;
 :
if( i<M*N )
{
 /* エラー処理 */
}
76仕様書無しさん:03/02/19 02:25
>>74
おれはN88Basicはおろか、N-Basic以前のLevel1 Basicだったり、
4k Basicだったり、10k Basic(Applesoft Basic)だったりしたころの世代だが
gotoは嫌いじゃないよ。使うときはまずgotoを使わない方法を検討してからだけど。
77仕様書無しさん:03/02/19 02:33
>使うときはまずgotoを使わない方法を検討してから
それをきちんとこなしつつ経験を積んできた人は、gotoを使うべき(安全に
使える)局面かそうでないかは自然に見えてくるよね。
goto文に過剰に反応する奴は、まだまだ修行が足りないと...
7851:03/02/19 02:52
>>75
ごめん。そんな書き方するくらいならgoto使う。(w

>>64のコード、結局何がやりたいのかわからんので
展開の仕様が無いんだが・・・・
それだけの情報なら、return とかexit とかできれいにかけるだろ。

goto使うくらいなら、アルゴリズムを含めて見直せって事。
79仕様書無しさん:03/02/19 03:05
今さらgotoネタで(以下略
8051:03/02/19 03:07
ついでに書いておくと、continue が一番嫌い (w
次がgoto で次がbreakの多用。

もうちょっとちゃんと構造化しろっていいたくなるソースって、
多重ループにif文いっぱいなんてことになって、
goto使わないとループからぬけられなかったり・・・

gotoって流れを切るから可読性損ねやすいし。
81仕様書無しさん:03/02/19 03:15
>goto使わないとループからぬけられなかったり・・・

ほう。具体例を見てみたい。

82仕様書無しさん:03/02/19 03:18
>80
>goto使わないとループからぬけられなかったり・・・

例えば?
83仕様書無しさん:03/02/19 05:37
C#では、フォロースルーをやろうとすればgotoを使わざるをえない。
84仕様書無しさん:03/02/19 08:01
>80
漏れも見やすくてステップ数を削減になるから
ある程度はgotoを利用するが、
しかし、if多重ループするならもっと構造化汁!(w
8550:03/02/19 08:47
> 51
...
> gotoって流れを切るから可読性損ねやすいし。

すんません、ソフトウェア業界に移ってきて一年の新参者なんで、まちがってたら教えて。
例外処理ってのはなんにしたって流れを切るもんだと思っているんですがそういう話ではないのですか?
それからあなたの言う展開っていうのが何のことを指していっているのか判りません。

goto使うとすっきりかけるパターンは限られているんですけど、そういう局面なら無理するよか可読性も保守性も高いと思います。
どうしても使うなって言われたら、>70 とか >75がやってくれたみたいになっちゃう。
こんなときはgotoでいいと思うんですけど。

構造化 == gotoを使わないこと、では無いと思うんですが。
86仕様書無しさん:03/02/19 11:05
漏れはcontinue好きだがな。
ifの多重ネストに陥るより、条件が偽ならさっさとループ先頭に戻っちゃう。
87仕様書無しさん:03/02/19 17:17
gotoなぁ…「gotoは使うな」って教え馬鹿正直に守ってただけなんだけど、
いつの間にか毛嫌いするようになったなぁ…。きっとあの外ty(ry。

なんつーか、別に使わなくても continue と break だけで綺麗に書けると
思うんだが…。kernelのソースとかでは割と良く使ってるよね。
88仕様書無しさん:03/02/19 19:16
後藤有害論
89仕様書無しさん:03/02/19 21:02
gotoはげんこつと一緒。
普段から使ってると人間関係なんて築けないけど
でも、使った方が相手のためになることもあるんだ。
90仕様書無しさん:03/02/19 21:07
>89
殴るのが快感になってしまう罠。
91仕様書無しさん:03/02/19 21:31
gotoを使っているというか、gotoしかないという感じのソースきぼん。
92仕様書無しさん:03/02/19 22:08
>>91
> gotoを使っているというか、gotoしかないという感じのソースきぼん。
ほれ、これをgotoを使わずに書き直してみろ。
int n = (count + 7) / 8; /* count > 0 assumed */
switch (count % 8) {
case 0:do { *to = *from++;
case 7:*to = *from++;
case 6:*to = *from++;
case 5:*to = *from++;
case 4:*to = *from++;
case 3:*to = *from++;
case 2:*to = *from++;
case 1:*to = *from++;
  } while (--n > 0);
}
countバイトだけfromによって指された配列からtoで指された場所までコピーする
93痴呆さん1/3:03/02/19 22:26
まず、多段ループをフラグで抜けたり、
下層のループだけを関数に追い出したりするのは論外だよね。
可読性が落ちるってことで、このスレでも正当な解決策として見られてない。

だからそこでgotoを使うっていうのもアリだと思う。
でも、gotoを使うと飛ぶ先のラベルを探さないといけないし、
すぐ目の前に飛ぶ先のラベルがあったとしても
好きな場所に飛べてしまって危険性が高いから、嫌う人も多い。
きちんと使える人ならば構わないとは思うんだけど、
やっぱり人間が触るものだから、安全になりやすい方法を取った方がいいよね。
94痴呆さん2/3:03/02/19 22:26
>>64みたいな行列処理なんかでは、
二段ループ全体を関数化して途中returnするっていう別の方法もあるよね。

/* すんごく適当なサンプル関数 */
int matrix(int row_start, int row_end, int col_start, int col_end)
{
  int i, j, response;

  for (i = row_start; i < row_end; i++) {
    for (j = col_start; j < col_end; j++) {
      response = set_data(i, j);
      if (response == ERRCODE) {
        return MATRIX_ERROR;
      }
    }
  }
  return MATRIX_SUCCESS;
}
95痴呆さん3/3:03/02/19 22:27
こうすれば、行列処理全体を一つの構造として見ながら、
ループの多段抜けをすることができる。
やってることはgotoで抜ける時と同じなんだけど、
抜けていく場所がはっきりとしているし、
使う側も処理のまとまりを関数を呼び出している一行で
すぐ認識することができるよね。
実装は関数の実体を見ないといけないけど、
これは構造の一部を抽象化しているわけだから
関数のインターフェイスと戻り値をしっかりコメントに書いておけば済むよね。

なんかちょっと話が逸れたりもしたけど、
もっと良くできないか、可能な限り頭を捻ってみようってことで。
実際のコーディングの際には、
行列処理部分のデータ構造見直しなんかもできるだろうしね。
何かに捕らわれないようにすることが大切だと思うよ。
96仕様書無しさん:03/02/19 22:30
>>92
gotoはdoko?
97仕様書無しさん:03/02/19 22:36
>>96
現在のソースを別の書き方にしようとするとgoto使っちまうけど、
goto使わずに綺麗に書けるんかなって意味でそ。
98仕様書無しさん:03/02/19 22:46
>>92

int i;
for(i=0; i<count; i++){
*to = *from++;
}
何度読んでも、これで同じ処理になると思うんだけど、わたし勘違いしてる?
99仕様書無しさん:03/02/19 23:00
>>92はDough's deviceっていうんだっけか。
そこまでするならアセンブラで書けば?という気もするね....


100痴呆さん:03/02/19 23:12
>>99
doughじゃなくても、うんこをわっかにしててもいいよね!!!
ウンコチンチン!!!!!!!!
101ヽ(´ー`)ノ:03/02/19 23:39
>>92
それ、パフォーマンスを稼ぐためのやつだよね。
102仕様書無しさん:03/02/20 00:43
103仕様書無しさん:03/02/20 01:14
構造化プログラミングを理解してない奴が安易にgotoを使う。
なぜならそうのほうがコーディングが楽だから。
決して他人のためにではない。自分の為にそうしてるだけ。
104仕様書無しさん:03/02/20 01:19
>>98
俺もそう思うんだけど‥‥‥
何か、間違ってるかなあ?
105仕様書無しさん:03/02/20 01:26
えー。>>70 でいいような気がするけどなあ。

goto使うと開発環境の支援が受けにくいのが困る。
「デストラクタが実行されません」とか言い出されたような。
106仕様書無しさん:03/02/20 01:39
>>105
いや、C++使ってるんなら、例外処理使うなり、デストラクタに任せるなり、いろいろ手はあるだろ?
107仕様書無しさん:03/02/20 01:45
goto 賛成派が実際に実務なりで書いたコードを、ここにいる goto 反対派で書き直してみるとか…。
守秘義務あるから無理か。

>>105
俺は、goto 使わないとワケワカメなコードになる=他のどこかがオカシイ…と思ってる。
goto やゴチャゴチャしたコードでクリアしても、所詮氷山の一角だろ。一度全体を見渡すべき。
108痴呆さん:03/02/20 01:58
非常に素晴らしいことを言った>>107タンのアヌスの臭いを嗅ぎたいよね?
私は嗅ぎたいです。
10998:03/02/20 02:01
>>104

101が、
> それ、パフォーマンスを稼ぐためのやつだよね。
だってさ。
今ならコンパイラの最適化に依存して
可読性を高めることの方が重要だよね。
時々暇潰しにああいうソース読むのならちょっと面白いけど。
110仕様書無しさん:03/02/20 02:12
ダイクストラのgoto有害論にクヌースが反論したのって
どっかで読めないかな。
111仕様書無しさん:03/02/20 02:14
>85
 例外処理ってのは、どこに移るかがはっきりとしたブロック(例外処理ブロック)と
して存在しているでしょ。
 どこでも無制限に飛んでしまえる goto とは意味合いが違う。

 構造化されている状態での流れの変化って、ようは「道路を変えて横道にそれる」程
度なんだけど、goto 使っちゃうと、そもそも道路を無視してワープしちまうのよ。


 goto ってニトログリセリンみたいなもんでさ。うまく少量使えば心臓病の薬になるけ
ど、多用したら爆薬じゃん。それを理解しないで使われると困るよね。
112仕様書無しさん:03/02/20 02:19
つまり「あるものは使え」って結論ですね。

さて、次の話題いってみましょう!
113107:03/02/20 02:29
>>108
勘弁してくれ(;´Д`)

「あるものは使え」で思い出したんだけど、メンバ変数に prefix 付ける奴ウザい。
this あるんだから this 使えや、プチ頃すぞ(ノ ゚Д゚)ノゴルァ ==== ┻━━┻
114仕様書無しさん:03/02/20 05:12
>>113
thisの付け忘れはどうやってチェックすんの?
115仕様書無しさん:03/02/20 09:01
>>113
prefixで保管し、prefixの付け忘れはthisで保管します。
両方使って意味の重複というリスクを背負って保守性を高めます!
素晴らしいです!
116115:03/02/20 09:01
保管→補完
117仕様書無しさん:03/02/20 09:08
( ´д)ヒソ(´д`)ヒソ(д` ) 
118107:03/02/20 09:24
>>114
>>107 と同じような考えなんだけど、this を付け忘れてパニくるような状況には必ず別に理由がある。
変な命名、深いネスト、不適切なアクセス修飾子…などなど。見直しすべき(キッパリ
119仕様書無しさん:03/02/20 09:41
public class A {
    private int number;
    public void setNumber( int number ) {
        number = number;
    }
}
// たまにやる。
120仕様書無しさん:03/02/20 09:50
つか、このスレのみんなって、C++とかの例外機構のある言語ではgotoは不要、
って考えてますか?
121仕様書無しさん:03/02/20 10:31
絶対要る/絶対要らない のどっちかを求めてないよね?
もしそうなら時間もったいないよ。

#そうでないなら、弊害が多いけど不要とは限らない と。
122仕様書無しさん:03/02/20 10:36
まぁ、実際Javaにはgoto文はないのに誰も困らないわけだが。
123仕様書無しさん:03/02/20 10:48
>>120
例外機構を利用するのはオーバーヘッドが結構バカにならないと思うが。
特に>>92のようなパフォーマンス狙いのコードにはね。

結論:TPOをわきまえて使えや。
124仕様書無しさん:03/02/20 10:56
>>122
でも予約語にはなってるよな。
125仕様書無しさん:03/02/20 10:59
そう、あれが不思議だ。
なんで予約語には残ってるんだろう。
126仕様書無しさん:03/02/20 11:04
>>120
> C++とかの例外機構のある言語ではgotoは不要、って考えてますか?
C++ではCより必要なケースは少なくなったと考えている。
# まだ、C++でgotoが必要なケースを体験したことはないけど
多分、C++でyacc, lexのようなあるコードからC++を吐き出すプログラムが
存在するようになった場合、gotoが必要になってくると考えている
127仕様書無しさん:03/02/20 11:10
>>125
javaの言語設計者も、そこまで踏み切れなかったんだろうなあ。
128仕様書無しさん:03/02/20 11:13
Java->C++に移植なんていうことはないのかな?
変数名にgotoを使うアホもいないとは思うが。
129仕様書無しさん:03/02/20 11:32
ところで>>92って、元は単なるバイトコピーじゃなくてmemory mapped I/O
だと聞いたことがあるのだが。左辺のインクリメントが無くて。
単なるバイトコピーなら、memcpyの方がずっと速そうな気がする。
memcpyがワード単位での転送を行う場合には。例えばVC++のmemcpy.asmは
そうなってるよね。
130仕様書無しさん:03/02/20 22:13
つか>>92ってtoをインクリメントしとらんけど良いのか?
131仕様書無しさん:03/02/20 22:57
132仕様書無しさん:03/02/21 00:06
>>128
後藤さんを表す変数だ
133仕様書無しさん:03/02/21 00:08
134仕様書無しさん:03/02/21 00:10
>>132
個人名を変数に使うのか_| ̄|●
135後藤:03/02/21 00:12
>>132
呼んだ?
136GTO:03/02/21 01:47
>>132
四打?
137仕様書無しさん:03/02/21 09:51
>>92

8バイト出力するごとにwaitが掛かるデバイス用なのかな?
138仕様書無しさん:03/02/21 11:13
>>136
あんたは綴りが違う
139仕様書無しさん:03/02/21 22:01
>>92
>>98
さらに最適化するとこうなる。
from+=count,*to=*(from-1);
140仕様書無しさん:03/02/21 22:21
Javaだと continue もラベルも使わないなあ
141仕様書無しさん:03/02/22 03:20
>>109
Dough's device そのものなら一目でわかる人間が多いから
問題にならないけど、似て非なるものを書かれたら嫌だね。
142仕様書無しさん:03/02/22 14:00
実はDuff's deviceだったりする罠。
143仕様書無しさん:03/02/22 20:52
>>122
Cでgotoを使うのは主に多重ループの脱出と例外処理。
Javaではbreakで多重ループを脱出できるし例外処理がサポートされているのでgotoが欲しい状況が少ない。

・・・だと思ってたんだけど違います?
学生ですスマソ。
144仕様書無しさん:03/02/22 21:27
>>143
同意見。それ以外でCでgoto使ったことはない。
Javaはそういう経験が元になってるのだろう。
145仕様書無しさん:03/02/22 22:03
何らかのソースコードジェネレータ(例えばyacc)でソースを生成する
ようなケースではgotoは重宝するのでは。

146仕様書無しさん:03/02/22 22:58
「gotoという予約語」の有無だけで議論す奴はDQN。
gotoがいらないというのはそういう意味じゃない。
147仕様書無しさん:03/02/22 23:16
>>118
↓のコードがコンパイルエラーになってしまいます。
どこから見直していけば解決できますか?
class container
{
  unsigned size;
public:
  unsigned size() const { return this->size; }
};
148仕様書無しさん:03/02/22 23:25
>>147
解決の手がかりははエラーメッセージに書いてるだろ。
149仕様書無しさん:03/02/23 00:04
>>148
名前が同じなのが悪いらしいのですが、
変数もsizeで正しいと思うし、関数もsize()で間違いないと思うけど、
>>118ならプリ・ポストフィックス無しで解決してもらえるのかな、と思ったのですよ。
150仕様書無しさん:03/02/23 00:06
>147
Cコンパイラを使っている、に1票
151仕様書無しさん:03/02/23 03:06
>>147,149
関数名が不適切。getsize()とでもしとけ。

>>150
あわてんぼさん。
152118:03/02/23 04:17
頭の悪い奴がいるな。
153仕様書無しさん:03/02/23 09:24
メンバにプリフィックスを使うと
class container {
    unsigned m_uintSize;
public:
    unsigned m_uintSize() const { return this->m_uintSize; }
};
とかになるの?
154仕様書無しさん:03/02/23 09:37
>>153
ms流のプリフィクス見てるといつも思うんだが、
size_unsigned
this->size_unsigned
でいいだろ。
this->とm_を両方書くのは無意味だし。
unsignedとintを両方書くのも無意味だし。
155仕様書無しさん:03/02/23 09:54
Javaで、複数のクラスで同一の数値変数を共有するソースコード。

interface NumHolder{
 static StringBuffer num = new StringBuffer();
}

class User implements NumHolder{
....
 num.clear();
 num.append(Integer(10).toString());
....
}

・・・どこから突っ込んだらいいものやら。
156仕様書無しさん:03/02/23 09:58
>>154
unsigned int
unsigned long
unsigned char
unsigned short は、
見分けられなくていいの?
157仕様書無しさん:03/02/23 10:04
まともなコードを見せてやるしかないのでは。。。

public class NumberHolder {
 private static int number = 0;
 getNumber() { return this.number }
 setNumber(int argNumber) { this.number = argNumber };
}
class User {
 private NumberHolder num = new NumberHolder();
....
 num.setNumber(10);
....
}
158仕様書無しさん:03/02/23 10:11
>>156
unsigned int以外は、もちろんunsigned_longみたいに書くよ。
確かC/C++の言語仕様では、unsigned == unsigned int じゃなかった?
俺は共通認識として広まってることをわざわざ書く必要は無いと思う。
159仕様書無しさん:03/02/23 10:24
public class NumberHolder {
private static int num = 0;
public static getNumber() { return num; }
public static setNumber( int aNum ) { num = aNum; }
}
public class User {
....
NumberHolder.setNumber(10);
...


"外部にあるものには、あからさまに外部にあるように"
アクセスすべきだと思います。
つか、singletonにすべきかも。
つか、本当に複数クラス間で同じ変数を共有すべきかどうか検討した方がいいかもですが。
160仕様書無しさん:03/02/23 10:29
public class User {
 private static int num = 0;
 public static getNumber() { return num; }
 public static setNumber( int aNum ) { num = aNum; }
....
NumberHolder.setNumber(10);
...

これでいいのでは?
161仕様書無しさん:03/02/23 10:54
>>160
意図がさっぱり分かんないんですが。
162仕様書無しさん:03/02/23 11:19
if( buf[0] == '0xCC' ) {
memset( buf, 0 sizeof buf );
}
163仕様書無しさん:03/02/23 11:30
>>162
で、リリースモードにするとワケワカメになっちゃうのね。
164 :03/02/23 14:48
>>163
buf が配列じゃなくてポインタだからめむせっとが
想定どおりに動かないっつーことでつか?
165仕様書無しさん:03/02/23 14:54
というか、, が1コ抜けてますよ奥さん。
166仕様書無しさん:03/02/23 18:22
>>162
'は2個余計だしな。
167仕様書無しさん:03/02/23 18:27
何にしても、辞めたくなるコードではあるな。
168仕様書無しさん:03/02/23 20:44
>>166
若しくは 0x → \x な。
169仕様書無しさん:03/02/23 21:53
この会社辞めようと思ったソースコード
をデバッグするスレはここですか?
170仕様書無しさん:03/02/23 22:08
ていうか、どんどん手がつけられなくなってくし。。。 。゚(゚´Д`゚)゚。
171仕様書無しさん:03/02/23 22:25
\xCC だと何で null 文字にセットするのか、コメント書いておいた方がいいような…。
172仕様書無しさん:03/02/23 22:28
おまいら、コードを見ればデバッグしやがらないでください。
もはや職業病でつね。
173仕様書無しさん:03/02/23 22:30
>>171
それがコメントにかける奴なら、>>162のようなソースにはならん(w
174仕様書無しさん:03/02/23 22:33
>>172
だってキモイんだもん(´Д`)

>>173
なるほど、理解したw
175仕様書無しさん:03/02/23 23:36
>>162
ていうか、たった3行のコードでここまで突っ込まれるのもスゴイような気がw
176仕様書無しさん:03/02/23 23:44
>>175
たった3行のコードにここまで突っ込みどころを収めているのがスゴイのだ。
177仕様書無しさん:03/02/24 00:13
>>175
製作者の仕事に対する姿勢あたりから突っ込みたくなるソースだからな。
「何でお前はそれを疑問に思わない?」と。

突っ込みどころ満載といえば、他スレの↓もすごいが・・・
http://pc.2ch.net/test/read.cgi/prog/1044600917/297
178仕様書無しさん:03/02/24 00:27
>>177
ポカーン(゜Д゜)……それ、マジ?
179177:03/02/24 00:53
>>178
うん。マジ。
長い間仕事してると、いらん行間よんだりする癖が染み付いちゃうのよ。
これも、>>172の言うように職業病なんだろうな。
新規のソース書きを指導するときなんて、やかましいぞ俺 (w

作者の意図を読み取る能力はデバッグでは必須だしなぁ・・・・
180仕様書無しさん:03/02/24 02:09
ようやく>>162の製作者の意図が読めた。(>>163のツッコミの意味も)
要するにコレ、VC製なんだよね?
181仕様書無しさん:03/02/24 02:39
>>180
おれはVCを知らんので教えて欲しいのだが、
初期化してない配列をVCでは'\xcc'で埋めるのか?

autoのみ? staticも? staticはないだろな、さすがに。

sizeof使ってるからmallocじゃないだろうし。
あ。ああいうコード書くくらいだからmallocの可能性もありか(w
182仕様書無しさん:03/02/24 02:40
漏れも >>180 見てやっと分かった(w
まじだめぽなソースだ(w
183仕様書無しさん:03/02/24 02:53
>>181
VCのコンパイラとリンカと標準ライブラリにはそれぞれ
リリース用とデバッグ用があって、
デバッグ用のときはmallocが領域確保したあとに0xCCで埋めて渡すんだよ。
0xCCCCCCCCってのは通常のアプリではアクセスできないアドレスなので、
初期化し忘れとかを発見しやすいっていう利点がある。
184仕様書無しさん:03/02/24 02:56
>>181
http://www.microsoft.com/japan/msdn/vs_previous/visualc/techmat/feature/vc6mrgrt/
ランタイムのエラーチェック以降を参照。
185181:03/02/24 05:38
>>183
>>184
ありがとう。なるほどデバッグビルドの場合のmallocね。
まじだめぽなソースだなあ(w

というかこれと同じようなことをやる、mallocファミリをラップするライブラリを作って、
もう10年以上愛用してるよ。overrunの検出とか、mallocされた領域かどうかのチェックとか、
あとmallocされた領域全部のチェックとかいろんな機能を盛り込んでる。
freeしたら、freeしたとわかるような値で埋めたりね。デバッガで領域をダンプすれば一発でわかる。
そうか、今は処理系がそういうことやってくれるのか。いい時代だな。

もしまかり間違ってVCを使うプロジェクトに放り込まれたときのために覚えておくよ。

確かGCCにも似たようなことやってくれる機能があったような気がするけど、
自作ので十分なので調べてないや。
186181:03/02/24 05:43
とかいって>>184の資料をよく読んだらauto変数までやってくれるのか。
いいなあ。GCCの方もそういうことできるかどうか真面目にマニュアルチェックしよ(w
おれのはmallocファミリだけだからだめだな(w
187仕様書無しさん:03/02/24 05:45
>>162
そのソース、どこを縦読みするんだ?
188仕様書無しさん:03/02/24 06:56
>>187
ツッコミ遅すぎ
189仕様書無しさん:03/02/24 10:51
>>183
スタック変数が 0xCC で、malloc() 領域は 0xCD じゃなかった?
190181:03/02/24 10:54
>>189
static変数って、規格でバイナリ0に初期化されてることになってるから、
それだとまずいような気がするんだけど。って、もう寝ます。おやすみなさい。
191仕様書無しさん:03/02/24 10:55
>>190 寝るのかYO!
192仕様書無しさん:03/02/24 12:55
俺は直接触ってないが隣の人がキレていたWebアプリ、
SQLが発行されるとそれをログに残すのだが、
ログインする毎にログファイルが最低3メガ膨れあがってた。
当然ログインするだけで5分位かかる。
原因は1ロウ毎に一回クエリが呼ばれるトンマな設計なんだが、
コンサル推奨設計なんで下っ端PGの俺らが何を言っても上司は聞きやしない。
ちなみにこの前辞めました。
193仕様書無しさん:03/02/24 21:24
>192

それ、

客が切れる
→アフォコンサルが>192の(元)会社に振る
→>192の(元)上司が平然と部下に責任を押しつける

……という結末が見えるようだ
>>190
static変数とスタック変数(autoのことだよね...多分)をごっちゃにしてませんか...
# ってもしかして釣られてるのか???
195177:03/02/25 02:10
>>178
以上を踏まえて>>162をみると・・・。
無条件にmemsetをしない(わざわざifを書く)のはなぜか?
仮説を幾つか立ててみた。(例を一つ。詳細理由は長いので省略)
処理
 bufはauto変数。
 loopの中に書かれている。
 loop内では、前回の内容を利用しつつ繰り返す。
とったであろう行動。
 初期化を意識せずにコーディング
 デバッグ開始
 初期化漏れに気がつくが、内容は0xccccだということを発見。
 0xccから始まるときには初期化をすればOK :-)

ってなところだろ。
0xccccで初期化される意味を知っていれば
こんなコードにはならんんだろうから、
デバッグ中に値見てってのが有力だろうとは思うんだが・・・・

ってことで、「何でお前はそれを疑問に思わない?」と
突っ込みたくなったわけだ。
196181:03/02/25 02:19
>>194
う。寝る前の寝ぼけまなこで読んだから「スタック」を「スタティック」と読んでた。
指摘ありがとう。おかしいと思ったところで見直せばよかったんだな。
謎は全て解けた、と思う(w
197189:03/02/25 12:05
で、漏れの疑問には誰が答えてくれるんだ?
今 VC++ さわれないんだけど。
198仕様書無しさん:03/02/25 12:18
>>197
VC6でやってみた。
autoは0xcc、malloc()領域は0xcdだったよ。

http://www.microsoft.com/japan/developer/library/vccore/_crt__malloc_dbg.htm
↑の解説も参照
199189:03/02/25 13:03
>>198
乙。やっぱり間違ってなかったか。
200仕様書無しさん:03/02/25 19:22
このスレは勉強になるな〜
0xccになるのは、そういう意味があったのね。
201仕様書無しさん:03/02/25 21:19
いやまったく
202仕様書無しさん:03/02/25 21:44
Cで作られたプログラムをC#でリファクタリングする作業をしているのだが、
昔のプログラムの動作がどうもおかしい。

画面に謎の文字列が表示されるのだ。

どうにも動作がおかしいので、プログラムを調べてみた。

‥‥‥この変数、初期化してねえ!
しかも、表示されている文字列から考えて、バッファオーバーランの可能性大。
そもそも、前後の条件を見るに、ここでこれを表示しているのがどうもおかしい。

よく、こんなのを何年も走らせていたな‥‥‥
203仕様書無しさん:03/02/25 22:00
>>202
/* このprintfを外すとなぜか動かない */
204仕様書無しさん:03/02/25 22:02
>>202
char dummy[4096]; /* 未使用だけど、なくすと動かない */
205仕様書無しさん:03/02/25 22:55
; /* 空文だけど,なくすと動かない */


なくしたけど動いた.怖いので戻した.
206仕様書無しさん:03/02/25 23:59
ええい、voodoo programmerどもめ。
207仕様書無しさん:03/02/26 00:01
>>202

そういうのは厳密にはリファクタリングとは言わないと思うが。
208仕様書無しさん:03/02/26 00:07
動いているものを無闇に変えるなと云われ、
指示通りに渋々既存ソースからコピペしたコード。
納品数日前になって、その中に↓のような記述ハケーン

 int foo[5], bar[5];
 for( cnt=0; cnt<=5; ++cnt ){
  foo[cnt]=cnt;

…確かにこれでも動くが…だからってそのまま納品可かよ!
209仕様書無しさん:03/02/26 00:42
>>208
製品にするならコメントは必須だろ。

 int foo[5], bar[5]; /* barを消すとなぜか動かない */
 for( cnt=0; cnt<=5; ++cnt ){
  foo[cnt]=cnt;
210仕様書無しさん:03/02/26 01:28
今日見つけたコード

for(unsigned int i = vec.size()-1 ; i > 0 ; i -= 2){
  … … … …
  … … … …
  if( i == 1 ) break;   //何故か必要
}
211仕様書無しさん:03/02/26 02:50
>>210
禿ワラ
212仕様書無しさん:03/02/26 08:20
>>209
cnt<=5
はいいのか!?
213仕様書無しさん:03/02/26 08:28
>>212 そこがミソなんじゃないですか。
214仕様書無しさん:03/02/26 08:28
>>212
・・・文脈読めてないだろ。
215仕様書無しさん:03/02/26 10:19
212氏に209氏のコメントの笑いどころを解説して欲しいかも。
216仕様書無しさん:03/02/26 12:27
bar[1]でいいんじゃねーのか?

とかゴネてみる。
217仕様書無しさん:03/02/26 12:36
>>216
ワハハハハ

218仕様書無しさん:03/02/26 21:03
なー、auto 変数にスタック使うタイプのコンパイラ、>>209 のコードでは
foo よりも bar の方が前のアドレスに確保されないか?
219仕様書無しさん:03/02/26 21:21
つまりこう↓か。

 int bar[5], foo[5]; /* barを消すとなぜか動かない */
220208:03/02/26 21:31
>>216
barは他の部分で使ってるから[1]ではアカン。
しかもbarへのアクセスもオーバーしてたし。(;-д-)ハァ…

>>218
前後で大量の変数が宣言してあったから大丈夫…だと思う。
使った領域も後の処理で正しい値が上書きされてたし。
…将来誰かが順番変えて謎のバグに悩んだりして。
221仕様書無しさん:03/02/26 22:02
>>220
とりあえずint foo[5]をint foo[6]にしとけば?
って、そんなことしたら動かなくなる可能性大有りだな…

なんか境界を越えて書いた値とかを参照して
動くようになってる臭いぷんぷんするし。
222仕様書無しさん:03/02/26 22:34
>>221
もう手遅れ。(納品済)
動けば良いというスタンスの上司だから、修正は認められんかった。
コメントの修正も許さんアフォだし、漏れもさっさと忘れる事に。
でもコメント追加は良いみたいだから>>209の手は使えたかもナ。
223仕様書無しさん:03/02/26 22:41
動けば良いというか、「動いてるものをいじるな」じゃない?
> 漏れもさっさと忘れる事に。
で正解と思われ。
224仕様書無しさん:03/02/26 23:03
>>222
で、忘れた頃に改修作業があって、
訳わからん原因不明のバグ調査に
多大な時間を費やすと。
225仕様書無しさん:03/02/26 23:28
// Hoge.h

class Hoge {
  ...
  Fuga untara;
  ...
}

// Hoge.cpp

Hoge::~Hoge {
  // untara.~Fuga();
  // ↑なぜか勝手に解放してくれるのでコメントアウト
  // (逆に、実行するとエラーになる)
}


あ た り ま え だ ろ う が。

226225:03/02/26 23:34
む。
s/~Hoge/~Hoge()/
だった。すまそ。
227212:03/02/27 00:00
>>209>>213-215
すまん、読めてなかった。
foo[5]に書き込んで破壊する領域は使ってないbarだからってネタなのね。
228仕様書無しさん:03/02/27 00:00
>210 って動くの?
激しく疑問なのだが
229仕様書無しさん:03/02/27 00:06
hoge(unsigned int atai, char* kekka)
{
 ...
 if(atai < 10){/*10未満の数値の変換処理 */
 ...
 }else if(10 < atai && atai < 100){/*100未満の数値の変換処理 */
 ...
 }else if(100 <= atai && atai < 1000){/*1000未満の数値の変換処理 */
 ...
 }
 ...
 ...
 ...
 ...
 ...
}

intをASCIIコードに変換する処理らしい。
もう、アホか8r
230仕様書無しさん:03/02/27 00:14
>>228
だれがどう見てもちゃんと動くにきまってるだろ。
ここまで完璧なソースは俺は見たこと無いね。

if( i == 1 ) break;
が無いとなぜか
ループを抜けてこないときもある んだが・・・
231仕様書無しさん:03/02/27 00:16
sprintfのない(どこにも無い)環境のコードかな
232仕様書無しさん:03/02/27 00:22
>>229
10の時は?
233仕様書無しさん:03/02/27 00:42
>>232
境界値でテストするのは基本だな。
234仕様書無しさん:03/02/27 00:47
>>218
> auto 変数にスタック使うタイプのコンパイラ
かどうかは関係なく、アライメントが同じならそのまま並ぶのがふつーでは?
つか、逆順にする意味判らん…
235仕様書無しさん:03/02/27 01:02
>>229
そういえば桁数を考慮しないint→char(ascii)変換って作ったことないや。

/* unsigned int -> char(ascii) */
hoge(unsigned int val, char* dat)
{
  int n = 0;
  unsigned int tmp = val;

  do {    /* valの桁数を求める */
    tmp /= 10;
    n++;
  } while(tmp);

  for(; n > 0; --n) {  /* 上位桁から埋める */
    *dat++ = val / (10^(n-1)) + '0';
    val %= 10^(n-1);
  }
  *dat = '\0';
}

こんな感じか。もっといい方法があるはず。
236仕様書無しさん:03/02/27 01:04
>>232
バグ。修正は俺がやらされた。
出力桁数指定が無いから「xx以上xx未満」という部分は不要だと思うけど。
237229:03/02/27 01:11
スマソ。229=236な。

今回は最小限の修正でやめとけと言われたから、不等号をつけただけ。
ちなみに、全部直していいと言われたら、こう書いただろうな。
スタックはギリギリまで削ってもいいかも。
void hoge(unsigned int atai, char* kekka)
{
 char Buffer[256];//スタック領域
 int i = 0;;
 do{
  Buffer[i] = atai % 10 + 0x30; //スタックに変換結果を積む
  atai /= 10;//次の桁を求める
  i++;
 }while(atai != 0);
 while(i--){
  *kekka++ = Buffer[i];// スタックから取り出し
 }
 *kekka = 0;
}
238仕様書無しさん:03/02/27 01:12
>>235
x86 ならアセンブラ使え。
239ねぼけてます:03/02/27 01:29
>>235 半分擬似コードとして書いてるんだろうとは思うけど 10^(n-1) はヤメれ。
その方法でUINT_MAX / 10 くらいまでだったら
tmp = 1;
while(tmp * 10 < val){
tmp *= 10;
}
while(tmp){
*dat++ = val / tmp + '0';
tmp /= 10;
}
*dat = '\0';
みたいな感じでどうだろう。UINT_MAXぎりぎりまでやるんだったら最初のループで
tmpをUINT_MAXをこえない最大の10の羃から始めてval以下になるまで10で割り
続けるとか。
240仕様書無しさん:03/02/27 01:39
>>239
val の更新もれてない?
241仕様書無しさん:03/02/27 01:45
>>239
>10^(n-1) はヤメれ。
何で?処理速度が遅いから?
242仕様書無しさん:03/02/27 01:45
10 と (n-1) の XOR?
243仕様書無しさん:03/02/27 01:49
ていうか、
1) sprintfやitoaが使える環境なら使え
2) それが使えないなら出来損ないのプログラム演習みたいなこと
やってないで適当なlibcのソースをパクれ
3) もっと高速なのが欲しけりゃAssemblerで書け
244241:03/02/27 01:50
>>242
ごめん、ねぼけてた。
245仕様書無しさん:03/02/27 01:51
取りあえずスタック不要版。引数をスタックがわりに使って
最後にstrrev。これが普通だと思うんだけど。

void hoge(unsigned n, char *s)
{
  char *p = s;
  int tmp;
  do {
    *p++ = '0' + n % 10;
    n /= 10;
  } while (n > 0);
  *p-- = 0;
  do {
    tmp = *p;
    *p-- = *s;
    *s++ = tmp;
  } while (s < p);
}
246仕様書無しさん:03/02/27 01:56
>>244
普通の人が睡眠に入る時刻に「寝ぼけてた」とはどういう了見だ
247仕様書無しさん:03/02/27 02:00
>>245
普通は>>239氏のアプローチだろ・・・
248仕様書無しさん:03/02/27 02:10
>>247
なんで?
>>245のコードは0<=n<=UINT_MAXに対して正しく動作すると思うけど?
249239:03/02/27 02:47
>>240 たしかに。正直すまんかった。
250仕様書無しさん:03/02/27 02:48
>>248
速度と可読性考えろ
251仕様書無しさん:03/02/27 03:06
if( a < (int)NULL ){ //もしaがマイナスなら

b[15] = (char)NULL; //ヌルターミネート
252仕様書無しさん:03/02/27 09:42
char* foo( unsigned int n, char* buf ) {
    if( n == 0 ) {
        *buf = '\0';
    } else {
        *buf = ( n % 10 ) + '0';
        foo( n / 10, buf + 1 );
    }
    return buf;
}
strrev??
253仕様書無しさん:03/02/27 09:52
正直、何のための処理なのかわかんないんですけど・・・<int->ascii
初心者ですいません
254仕様書無しさん:03/02/27 10:03
>>253
画面に表示したり、ファイルに落としたりするとき、
テキスト形式のほうが便利なことが多いしね。
最近はネットワークに乗せる信号とかもテキスト形式だし。

つか、まぁ結局 >>243 が正しいんだけど。
255 ◆ZzlEVb5TFs :03/02/27 10:37
誰か助けて。
#define REP Report::Output
#define REPERR Report::OutputError
#define REPWARN Report::OutputWarning
#define REP_INDENT_TOP() Report::TopIndent()
#define REP_INDENT_BEGIN() Report::BeginIndent()
#define REP_INDENT_END() Report::EndIndent()

使用してるのは、REP だけ。
しかも クラスごとにあって、しかもソースが8ファイルも。
さらにメソッドすべて static 指定。

書き直そうにも さわりたくない…。
256仕様書無しさん:03/02/27 10:44
>251
アドレスが負の値をとるの? unsignedだと判定に
失敗することってない?(コンパイラによるか…)
257uniuni:03/02/27 10:56
>256
何がアドレスなのかしら?
質問が解らないわ。

258仕様書無しさん:03/02/27 11:06
>>255
「class」を「namespace」に置換すると、
頭痛が少し和らぎますよ。
259仕様書無しさん:03/02/27 11:45
>>251 はヌル文字や0を使うべきところにヌルポインタを使ってることを非難しているのでは?
たぶんaはintの変数で,bはcharの配列なんだよ。ポインタじゃなくて。
260仕様書無しさん:03/02/27 12:05
>>255
ソースが8ファイル...
むしろ、少ないんじゃないか?それ。
(何のソフトウェアか知らんけども...)
261仕様書無しさん:03/02/27 13:12
>>260
ファイル数が少ない場合、2つの理由が考えられます。
・規模が小さい。
・1ファイルが数万行以上もある。
>>255のケースは後者の可能性が高いです。
262仕様書無しさん:03/02/27 20:34
ちょっとトリッキーな int->ASCII 変換コード(の一部)。

 ch = "0123456789ABCDEF"[n&0xf];
263仕様書無しさん:03/02/27 21:00
ch = ( n & 0x0F )["0123456789ABCDEF"];
264仕様書無しさん:03/02/28 14:50
>262
それをぜんぜんトリッキーと思わない俺は誰かを辞めさせているのでしょうか。
265仕様書無しさん:03/02/28 17:16
>>264
中の人が何人か・・・。
266仕様書無しさん:03/02/28 20:00
休職中の人などいない!
267仕様書無しさん:03/03/01 03:50
>>264
いや、あんたの感覚は正常だろ。
連続していることが保障できないようなコード
変換はテーブルを使うのは常識。
268仕様書無しさん:03/03/01 16:22
>262と>263が等価かどうか理解できるかどうか、ってのは
C言語の理解度を測るひとつのポイントだな。
269仕様書無しさん:03/03/01 16:52
>>268
263 はあんまり要らない知識だと思うの。
270仕様書無しさん:03/03/01 17:22
#define TABLE "0123456789ABCDEF"
ch = TABLE[n & 0xf];    /* こう書くと誰も気にしないだろう */
ch = TABLE + ( n & 0xf ); /* こんなのはまだマシ */
ch = ( n & 0xf )[TABLE];  /* 会社を辞めさせられたいときに書くコード */
271仕様書無しさん:03/03/01 18:38
>>270
char table[]="0123456789ABCDEF";
だろ・・・
何でマクロなんだよ。
272271:03/03/01 18:39
>>271
スマソ const 付け忘れた。
273仕様書無しさん:03/03/01 19:50
staticも付けない?
274仕様書無しさん:03/03/01 21:50
>>273
static と const は同時に使えたっけ?
275仕様書無しさん:03/03/01 22:15
>>274 大丈夫じゃない?私はこの状況だったらいつも static const で宣言してるし。
276仕様書無しさん:03/03/01 22:29
char* sbuf;
int i;
...
sbuf = (char*)i;


このコードで、「sbufに、ちゃんと値が入らないよ〜、なんで〜?」と相談された。
入社年度2年上の先輩に。
277仕様書無しさん:03/03/01 22:58
>>269
知識としてはいらなくても、なぜ等価なのかを理解できるかってことじゃないかな?
278仕様書無しさん:03/03/01 23:11
>>277
知ってて当たり前だとは思うが、いらん知識だろ。
それよりも
ch = ( (n&0xf) <= 9 ? '0' : 'A' ) + (n&0xf) ;
と「等価でない」ことが理解できるほうが重要。
279278:03/03/01 23:12
スマソ 'A'-10 な。
280仕様書無しさん:03/03/01 23:32
スマソワカンネ・・・

唯一の心当たりは
・ANSI Cの文字コードはASCIIコードである必要は無いの?
ってことか(この場合'\0'はどうなるんだろ。'\0'だけヌル文字って定義があるとか?)
あ・・・そういえば日本語環境だと文字コードはASCIIじゃないしなぁ。

教えてください。お願いします。
281仕様書無しさん:03/03/01 23:41
結果は同じだが
プロセスが「等価でない」
ってことだろ
282280:03/03/02 00:01
気になったんでK&Rを調べてみた
これに近いことがK&Rの53ページの下のほうに書いてあったよ。
やっぱりASCIIである必要は無いのね。

/* lower: cを小文字に変換する; ASCIIのみ */
int lower(int c)
{
  if (c>= 'A' && c <= 'Z')
    return c + 'a' - 'A';
  else
    return c;
}

「これはEBCDIC文字セットには当てはまらない」とか書いてあるし。
そういえばそんな文字セットを大昔学校で習ったなぁ(藁
勉強になりました。ありがとう。
283仕様書無しさん:03/03/02 00:17
>>278
(n&0xf)が2回出現するのがやだな。
284仕様書無しさん:03/03/02 00:29
化石レスでスマソ
>>230
って何故だか分からない人って多いのか…?
285仕様書無しさん:03/03/02 00:30
Cでは'0'から'9'は連続していることが仕様上決まってるけど、アルファベットはそうとは
限らないということになってたと思います。EBCDICはその一例…って他に知らんけど(^^;
286仕様書無しさん:03/03/02 01:02
>>285
> Cでは'0'から'9'は連続していることが仕様上決まってる

え? え?
287285:03/03/02 01:16
あ、しまった。大小関係がひっくりかえらないことだけが保証されてるんだったか。
軽く逝っとくわ。
288280:03/03/02 01:23
K&Rの54ページにそれらしきことがかかれているのを発見
しかし236ページではどうも逆にも読み取れるような記述がある

結局どっちなの?

K&R54ページ
c >= '0' && c <= '9' という検査は isdigit(c) と置き換えが出来る
(ただし、前述の「ASCIIのみ」との注意書きのある節と同一の節に記載のため、
 その注意書きの有効範囲がここにも及ぶとすれば逆の意味となる)

K&R256ページ
単一の文字からなる文字定数の値は実行時のマシンの文字セット中の文字の数値となる。
多くの文字からなる定数の値は処理系ごとに異なる。
289仕様書無しさん:03/03/02 01:25
>>287
以下のコードを試してみなされ。

int nVal;

nVal = '9' - '0';
printf("%d\n", nVal);
290ヽ(´ー`)ノ:03/03/02 01:32
>>284
*うまく行く事もある* っていうのも含めて笑いドコロだと思ってたんだけど。
291仕様書無しさん:03/03/02 01:39
C の規格に、文字定数がどんな値になるかの規定なんて無かったはずだが。
292仕様書無しさん:03/03/02 01:42
>>284
sizeがゼロの時、iってunsigned int の最大値になるから、
それが問題なんじゃないの。
293仕様書無しさん:03/03/02 01:50
>>284
何でもかんでもprintfでチェックする癖があると永遠に分からないかもな。
int main(int argc, char* argv[])
{
unsigned int x=1;
x-=2;
printf("%d\n",x);
return 0;
}



↓こうすりゃ分かるだろうが…。
int main(int argc, char* argv[])
{
unsigned int x=1;
x-=2;
printf("%u\n",x);
return 0;
}
294280:03/03/02 01:59
勝手なまとめ(間違いがあればご指摘ください)

・Cには文字定数がどんな値になるかの規定は無く、処理系によって異なる
 つまり、アルファベットや数字が連続していたり順番になっている保証は無い
・'\0'は'\n'等と同じエスケープシーケンスであって、文字定数0を表すものではない
 ちなみに八進表記の0は'\00'であり、十六進表記の0は'\x0'である。また十進表記は存在しない
・文字コードから離れた形で文字定数を扱うには<ctype.h>に定義される
 「isdigit」「toupper」等の各々の関数を使うか、>>262のようなテーブルを用いる

かなりのスレ違いスマソ
295仕様書無しさん:03/03/02 02:06
>>271
ツッコミどころはそこでは無い。270の例ではどっちでもいい。

ところで、
char *table = "0123456789ABCDEF"; /* これと */
char table[] = "0123456789ABCDEF"; /* これの */
違いは判るか?

ちと心配になるぞ。
296271:03/03/02 03:10
>>295
はぁ、違いも何も・・・・
ところで、
char *table = "0123456789ABCDEF"; 
は、かなりいけてないと思うんだが大丈夫か?
297仕様書無しさん:03/03/02 03:13
>>296
え、なぜいけてないと思うの?
298仕様書無しさん:03/03/02 03:16
table[0] = '0' ;
299270:03/03/02 03:29
/* 訂正 */
ch = *( TABLE + ( n & 0xf ) ); /* こんなのはまだマシ */
300仕様書無しさん:03/03/02 08:54
おはずかC。
memset(buf, sizeof buf, '\n');
301仕様書無しさん:03/03/02 09:03
図らずも271が馬鹿であることがばれました。
302271:03/03/02 09:17
>>301
お、おれっすか?

少なくとも 301よりましなことは確かだが・・・(w
303仕様書無しさん:03/03/02 09:28
>>300
何も恥ずかしがることはない

(だって例外処理をテストするためのコードなんしょ?それ。)
304仕様書無しさん:03/03/02 09:31
>>300
char buf['\n'];
とか?
305仕様書無しさん:03/03/02 09:33
>>302=271
>>296の発言の意図するところを説明してくれたまえ
でないと>>301が正解ってことになるぞ
306仕様書無しさん:03/03/02 09:55
>>305
わからんかっただけかい(w
自分で考えろ。
307仕様書無しさん:03/03/02 10:07
プププププ
やっぱり271はバカでした。
ソースは>>296
308ニセ271:03/03/02 10:12
だってsizeof(char *)の分だけ余計にメモリを消費するもん!
309271:03/03/02 10:17
>>308 違(w
310仕様書無しさん:03/03/02 10:27
>>296
ん?どこがいけてないんだ?
311仕様書無しさん:03/03/02 11:05
だから >>298 が答えなんだろ。こんな下らんことでスレ違いな話すな。

>>300 それは buf が配列じゃなかったってオチ?
312仕様書無しさん:03/03/02 11:53
313仕様書無しさん:03/03/02 13:53
>>311
漏れも>>296のどこがいけてないのか分からん。
314仕様書無しさん:03/03/02 14:01
もういやだ、こんな議論の繰り返される会社には、もういたくない
315しんぢん:03/03/02 14:27
ボク、itoa()使うコトにしましたんで、
定時退社でお先に失礼しまーーーーす。

316仕様書無しさん:03/03/02 14:33
298のtable[0] = '0' ;っていうのは何をいいたいんだ?
駄目なコードってこと?

'0'==0x00と勘違いしてるってオチ???
'0'は0x40だったっけ?



300は引数がおかしい
memset(buf, sizeof buf, '\n'); ×
memset(buf, '\n, sizeof buf'); ○

ちなみに私はsizeof括弧つけてるけど。。。
317仕様書無しさん:03/03/02 14:34
あ、微妙にコピペ失敗してる
318仕様書無しさん:03/03/02 14:40
ちなみに文字列用の配列に終端文字入れるときどれつかいます?
0, NULL, 0x00, \0などいろいろあるけど(しかしこれは宗教論争になりかねない(?)

char c[3];
c[0] = 0;
c[0] = NULL;
c[0] = 0x00;
c[0] = \0; // ←私はこれ
319仕様書無しさん:03/03/02 14:41
あ、また間違えてる、'\0'ね
320仕様書無しさん:03/03/02 14:45
NULL 使うヤツはアホです。
321仕様書無しさん:03/03/02 14:48
>>320
それはどうかと思うが…>>316-319がアホなのは取りあえず、俺にも分かったよ。
322仕様書無しさん:03/03/02 14:51
>>321
それはどうも

それじゃアホな俺に分かりやすく教えてくれ
298どこに突っ込みがあるんだ?
323仕様書無しさん:03/03/02 15:01
316-319の言っている事は何も間違っていないと思うが…。
漏れも>>296の真意が知りたい。 まったく分からん。
324仕様書無しさん:03/03/02 15:01
>>315
itoa() ?
どのライブラリだ?
325仕様書無しさん:03/03/02 15:04
296 :271 :03/03/02 03:10
>>295
はぁ、違いも何も・・・・
ところで、
char *table = "0123456789ABCDEF"; 
は、かなりいけてないと思うんだが大丈夫か?

298 :仕様書無しさん :03/03/02 03:16
table[0] = '0' ;

   分からん…。 271がアホなのか漏れがアホなのか…。
326仕様書無しさん:03/03/02 15:05
終端文字に使用できるのは '?0' だけだ。
「0x00でも0でもNULLでもいい」って訳じゃない。
しかし、 おれも >>298 は意味不明だとおもう。
327仕様書無しさん:03/03/02 15:08
>>296
文字列定数をポイントするのに、constがついてない、ってこと?
>>298
で、その文字列定数を変更しちゃいそうになるから、いけてない、って説明なの?それ。
328326:03/03/02 15:13
あ、待って!
'?0'の0って、「8進数の0」って意味なの?もしかして。
329仕様書無しさん:03/03/02 15:14
あ、なるほどね。
ちょっと今やってみたけど
char *table = "0123456789ABCDEF";
char table2[] = "0123456789ABCDEF";
table2[0] = '0'; // ←OK
table[0] = '0'; // ←エラー発生

つまり
tableにその後代入したりするなら
* ではなくて []を使う
代入できないchar *table = "0123456789ABCDEF";は
const char *table = "0123456789ABCDEF";
にしろってことでファイナルアンサー? まだ間違ってる?
330仕様書無しさん:03/03/02 15:18
const char* const table = "0123456789ABCDEF";
これで完璧?

しかし*と[]の違いなんてすっかり忘れてたよ、基礎だけど
331316:03/03/02 15:37
ありがd、やっと分かったよ

int n = 1;
char ch = ( n & 0x0F )["0123456789ABCDEF"];
しかしこれが通るとはねぇ・・・知らん買った
まぁ使うことはないだろうけど。。。
332仕様書無しさん:03/03/02 16:15
>>324
stdlib
333仕様書無しさん:03/03/02 16:16
>>329
わかりきった事をわざわざやってみたのねゴクロウサン。

だから、そーゆー事分かってる上で
>>296の言いたい事が理解できないんだって。
table[0] = '0'; でエラーがでるからいけてないの?
むしろエラーが出た方がいいでしょこの場合。
334にやこう ◆Es3JBt9s5c :03/03/02 16:31
(・∀・)
335仕様書無しさん:03/03/02 16:31
>>329
>>330
char* const table = "0123456789ABCDEF";
だと思ふ。
336仕様書無しさん:03/03/02 16:37
>>333
実行時にエラーが出るより、
コンパイル時にエラーが検出された方が・・・
337仕様書無しさん:03/03/02 17:48
>>333
336以外私も考えられんのだが。

にしてもなんでCは
char *table = "..."; // ここでなぜ”constがないですよ”と警告しないのか?
table[0] = '0'; // なぜこのコードを書いてエラー、または警告を出さないのか?

出そうと思えば出せたはずなのに。
この理由はわからないな。

激しくスレ違いだが。
338仕様書無しさん:03/03/02 17:52
char *p;
...
char *table = "...";
table = p;
が可能だからかな?
339仕様書無しさん:03/03/02 18:31
>>338
その操作( p = table )を抑止するためには
char* const table = "....";
と書きます。
よって、的外れ。

「変更不能なオブジェクト」へのポインタは、
文字列定数を指す場合を除き、
const 宣言する必要があるのです。
何で文字列定数だけ特別扱いなんだ!
340仕様書無しさん:03/03/02 18:40
>>339
const が無かった時代の伝統を引きずっているから。
341295:03/03/02 18:51
どんどん元ねたとはズレていくが、、、
271はポインタの配列は使えているか? かなり心配になるぞ。

ポインタの初期化・配列の初期化・配列演算子のことで混乱しているのは結構いるみたいだな。
気持ちはわかるが同情しないからな。

もしかして271は俺のコードのせいで会社を辞めた人だったのかも。

>329
table[0] に書き込めるコードを吐くコンパイラ(もしくはコンパイラオプション)もある。
そんなコンパイラの中でも、
 #define TBL "0157"
 char *tbl0 = TBL;
 char *tbl1 = TBL;

 tbl0[0] = 'o';  /* よい子はまねしないようにね */
 printf( tbl1 ); /* これはこれで行儀悪いかな */
とやったとき、0157と表示されるのもあれば、o157と表示されるのもある。
こんなコードがたくさんあったら俺も辞めたくなる。
342仕様書無しさん:03/03/02 18:51
>>339
そ..そうか、const は、C++から逆輸入したものでしたねぇ。そういえば。
つーか、char* s = "..."; みたいな初期化は ANSI で禁止してもらいたかったなぁ。
343仕様書無しさん:03/03/02 19:00
>>341
「『変更してはならない文字列』へのポインタ」へのポインタ
「変更してはならない『文字列へのポインタ』」へのポインタ
は?
344仕様書無しさん:03/03/02 19:04
僕はBASICしかやったことが無いので、ポインタなんて見たことがありません。
メモリの様子を逐一記憶し、どきどきしながら実行するのはやめましょう。
あなた方の使っている言語は地獄への片道切符に他なりません。
345仕様書無しさん:03/03/02 19:06
>>338
>>339
char* const p;
...
char* const table = "...";
table = p;
346仕様書無しさん:03/03/02 19:08
>>344
BASIC で PEEK, POKE を使ってドキドキした経験があるのでつが・・・
347仕様書無しさん:03/03/02 19:10
↓↓↓↓↓★ピンクエンジェル★↓↓↓↓↓
http://www.pink-angel.jp/betu/linkvp/linkvp.html
348仕様書無しさん:03/03/02 19:13
>>346
それはメモリを直接読み書きする命令で、
ポインタとは意味がちがうじゃろ。扱うブツは同じだが。
349仕様書無しさん:03/03/02 19:32
varptr だっけ? 懐かしい!
350しんぢん:03/03/02 20:16
>>344
 そうか!ポインタを使っているのが不幸のはじまりなんですね!先輩!
ボク、明日からポインタは使わないことにします!

代わりに、全部配列を使うようにします!
これなら安全ですよね? BASICの先輩!!
351仕様書無しさん:03/03/02 20:30
会社の人のコードを見ても、 const が全然出てこない理由がやっと解った気がする。
つか、constの振る舞いを知らない人って、結構いるんだね。
352仕様書無しさん:03/03/02 21:06
構造体を卒業できないヤツはC++プログラマにはなれない。断言。むはっ。
353仕様書無しさん:03/03/02 21:26
>>351
1) 正しくconstを使わないとcastを強制されがちなので避けてしまう。
# 特に正しくconstを使っていないプログラム断片やライブラリと
# 協調する必要が或る場合には。
2) 古いCプログラマほど「Cは高級アセンブラである」「Cプログラマは
自分のやろうとしていることが分かっている」という信念に従って
おり、機械語レベルでは意味がない構造物を必要と感じない。
# ただしデータをROMに配置する必要が有ったりする場合などには使う
3) 実際にTEXTに書き込んだらすぐ落ちて分かるからまあいいや。
4) タイプ量が増えるのがいやん。
5) 単によく分かっていない。

などが想像される。
354295:03/03/02 22:17
>>343
あらたまって聞かれると混乱する。

// 「『変更してはならない文字列』へのポインタ」へのポインタ
char const str0[] = "abc";
char const str1[] = "cde";
char const str2[] = "ghijklmn";
char const *arr[] = { str0, str1, str2 };
char const **ptrptr;

ptrptr = arr;
ptrptr[0][0] = '0'; /* ng */
ptrptr[0] = str1; /* ok */

// 「変更してはならない『文字列へのポインタ』」へのポインタ
char str0[] = "abc";
char str1[] = "cde";
char str2[] = "ghijklmn";
char * const arr[] = { str0, str1, str2 };
char * const * ptrptr;

ptrptr = arr;
ptrptr[0][0] = '0'; /* ok */
ptrptr[0] = str1; /* ng */

/* これでいいんだっけ? */
355仕様書無しさん:03/03/02 22:33
>>354
他人のことを馬鹿にしている暇があったら
ポインタのこと、もうちょっと勉強しろよ(w
356仕様書無しさん:03/03/02 22:36
なぁなぁ。
未だに良くわからないんだが、どうしてポインタが必要なの?

変数がどこに格納されていようとOSの勝手じゃん。
素直に変数を参照しろよ。メモリの中を勝手に覗いたり、書き換えたりするなよ。
おまえらのやってることは

「覗かないでください」

っていって隣の部屋に入った汚通(鶴の化身)の行為を踏みにじるようなもんだ。
汚通は隣の部屋でオマエの財布から金を抜き取っているだけなんだから勘弁してやれよ。
357212:03/03/02 22:46
>>356 とりあえず帰れ
358仕様書無しさん:03/03/02 22:57
どーでもいいけど「汚通」とか書くんじゃない!ぷんぷん
359仕様書無しさん:03/03/02 23:03
>>354
一部間違ってます。
360仕様書無しさん:03/03/02 23:03
>>356
「素直に変数を参照しろよ」

素直な変数の参照って何だ?
つか、お前は
「どんなでかいオブジェクトでも、コピーによって受け渡すべきだ」とか主張してるのか?
「C++に置けるあらゆるポインタは、参照によって書き直すことが可能だ」と主張してるのか?
「C言語のような、インクリメント可能な参照のある言語は使うな」と主張してるのか?

361仕様書無しさん:03/03/02 23:05
>>360
その、インクリトリスメント可能とやらはなんですか?
362仕様書無しさん:03/03/02 23:05
>>359
不正な書き込みは、だいたいの場合検出できないと思われ、
だよね。
363仕様書無しさん:03/03/02 23:25
>356
ネタだろ?そうだよな?
364仕様書無しさん:03/03/02 23:30
Javaではポインタなんて使わないよ。
365仕様書無しさん:03/03/02 23:41
>>364
参照先を変更できる参照型がプリミティブに組み込まれてるからな。
俺もその言語使って仕事したいよ。
366仕様書無しさん:03/03/02 23:59
>>365
最近のPGってJavaやC++が多いから
あと10年くらいしたら
「C言語」で開発できるPGって天然記念物存在になるのだろうか…

*注:ここでいう「C言語」≠「C++」(、もちろん≠「C#」)
367仕様書無しさん:03/03/03 00:09
>>366
既にN88-BASICでプログラム作れる奴は天然記念物だしなぁ(^^;
(いま考えると大戦略とか、ある意味すごいよな)
確かに、オブジェクト指向ではない言語で
まともな開発ができるのは珍しくなってくるかも・・・
368仕様書無しさん:03/03/03 01:39
そしてCOBOLERと同じ運命に・・・
369仕様書無しさん:03/03/03 01:53
>>368
そうなるかなあ…。

おれも今はほとんどCではプログラム書くことないけど。
Cの存在意義は高級アセンブラとしてだから、残ると思うよ。

C99になってから変な機能がちょっとついたけど、
それでもCは機械語レベルでどういう命令に落ちるか
だいたい透けて見えるのが利点だからね。

C++で代替できるかというと、どうだろ。多態とか使い始めると、
どういう命令に落ちるかわからなくなってきそうだ。性能も落ちるし。
370仕様書無しさん:03/03/03 02:01
>>369
それはそうなんだけど、実際に(良く書かれた)Cのソースなんか見てると、
マクロとか使って、OOっぽく作られてるよね。パッと見はそう見えなくても
設計がOOっぽいとか。
何か技術革新が起きれば(コンパイラの性能アップ/ハードのスペックの底上げ etc.)
、OOな「高級アセンブラ」ができてもおかしくないんじゃないかと思う。
C++がそうなるとは限らないけども。
371仕様書無しさん:03/03/03 02:17
>>370
うん、そうね。確かに構造体とマクロを駆使してOOっぽく書いてあることが多いね。
つか、おれもやってたよそういうこと(w

これやると機械語にどう落ちるか見通しが悪くなるんだよなあ。
でもソースレベルのコードは明快になるし。

>OOな「高級アセンブラ」ができてもおかしくないんじゃないかと思う。

現状で一番近い位置にいるのはC++で間違いないと思う。
372仕様書無しさん:03/03/03 02:21
>>369
難しいところだけど、高級アセンブラの役目はもうないかと。
最近の性能向上のおかげで、処理速度はあまり問題にならないし、
コンパイラの性能が上がったので速度低下も目立たないし。

組み込み機器などの特殊用途にはマクロアセンブラなどが出てきているし、
専用チップなどになってそもそもCでは組めなかったり・・・
373仕様書無しさん:03/03/03 02:21
素人判断ですが、
インタープリタ言語のほうがニーモニックにどう落ちていくかわかりやすくありませんか?
インタープリタはコンパイラが事前に最適化を施す余地がほとんどありませんから。
374295:03/03/03 03:57
実は手元にCコンパイラ無いので確認しないで書き込みしてしまいました。

>355
すんません。調子こきすぎました。勉強します。

>359
どこなんでしょう。教えてください。
375仕様書無しさん:03/03/03 05:46
>373
インタープリタは解釈・実行部が裏(?)で動いているため、
そのコードから直接ニーモニックが想像できるなんて事はないかと。
376仕様書無しさん:03/03/03 07:28
>>369
Cで見えていたのがC++で見えなくなる道理は無い。
コンパイラにアセンブリソースを吐かせることはできるし、
トレースしてればすぐ目に付くし。
377仕様書無しさん:03/03/03 07:46
もしいつか高級アセンブラとしてCを置き換えるものができるとしたら、
C++はちょっと嫌だなぁ。もっとシンプルなモノがいい。
378仕様書無しさん:03/03/03 10:10
fp=fopen(name,"r");
if(!fp)
{
  for(;3;){/* error */}
}
379仕様書無しさん:03/03/03 14:19
if文の条件節が3行くらいに渡っているのを見たとき。
行番号をふっていたとき。
フラッシュとロールバックはおろか、レコードのロックも知らなかったとき。
380仕様書無しさん:03/03/03 14:20
    _, ._
  ( ゚ Д゚)
  ( つ旦O
  と_)_)


    _, ._
  ( ゚ Д゚)   ガシャ
  ( つ O. __
  と_)_) (__()、;.o:。
          ゚*・:.。
381仕様書無しさん:03/03/03 14:38
GIF89って最初に書いたけど、
これはテキストファイルだよね?

っていう内容のファイル「test.txt」をWebサーバ上に置いてInternet Explorerで
アクセスするとどうなると思いますか?



382仕様書無しさん:03/03/03 14:39
>>>381
オマエが馬鹿になる。
383仕様書無しさん:03/03/03 14:48
    _, ._
Σ( ゚ Д゚)   ガシャ
  ( つ O. __
  と_)_) (__()、;.o:。
          ゚*・:.。
384仕様書無しさん:03/03/03 14:51
                _,.. ---- .._
              ,. '"       `丶、
              /            ` 、
            ,..-‐/    ...:  ,ィ  ,.i .∧ ,   ヽ.
.         ,:'  .l .::;',. :::;/..://:: /,':/  ', l、 .i  ヽ
.          ,'  ..::| .::;',' :;:','フ'7フ''7/   ',.ト',_|, , ',.',
       ,'   .::::::!'''l/!:;'/ /'゙  /     '! ゙;:|:、.|、| 'l
.         ,'.  .:::::::{ l'.l/  、_  _,.      'l/',|.';|
       l  :::::::::::';、ヾ      ̄     `‐-‐'/! ';. '
.         ! :::::::::::/ `‐、        ゝ   |'゙ |
       | ::::::::/   \    、_, _.,.,_ ノ::: !   >>381の病気が軽くなりますように・・・
       |::::/.     _rl`': 、_     ///;ト,゙;:::::./
..      `´      /\\  `i;┬:////゙l゙l ヾ/
                ,.:く::::::::`:、\ 〉l゙:l  / !.|
.            /:.:.:.:\:.:.:.:.`:、ソ/:.:|    | |
           /.:.:.:.:.:.:.:.:.:\:.:.:.:У:.:;l   /./
.          /:.:.:.:.:.:.:.r'´`‐,`、:/.,.:‐{   | !`:、
           ,'.:.:.:.:.:.:.:.:.';_,゚.,ノ.:./,:':.:.:.:',  | |`、:|
           !:.:.:.:.:.:.:.:.:.:.゙、:.::/:.:.:.:.:.:.ヽ, / ,!:.:`、
385仕様書無しさん:03/03/03 15:11
>381の現象って有名なの?ちょっとビックリした。
386仕様書無しさん:03/03/03 17:08
IEって確か、Content-Typeも無視して
ファイルの中味で何のファイルか決めようとするんだったよね。
拡張子がjpgのブラクラっぽいhtmlファイルを踏んで慌てたことがある。
大量のimgタグで、src属性にmailtoを付けてただけだったけど。
387仕様書無しさん:03/03/03 17:34
388仕様書無しさん:03/03/03 17:38
>>379
> if文の条件節が3行くらいに渡っているのを見たとき。
俺はif文を
 if (foo.bar() == FOO_BAR
   && (! hoge.isFuga())) {
   .....
 }
みたいに書くんだけど、ダメでつか?
389仕様書無しさん:03/03/03 18:44
>>388
(・∀・)イイ!!
390仕様書無しさん:03/03/03 18:53
>>388
俺はifやforの条件節が複数行に渡るのは醜いと思うのだが、1行80字以内には
納めたいと思っているので、長くなるときは複数行に分ける。
ただ、普段は{}をK&Rスタイルで配置するのだが、そういう場合に限って
if (very_long_and_winding_expr1
&& very_long_and_winding_expr2)
{
  ....
}
みたいな感じにしてしまう。この場合、ブロックが不要な場合にも
ブロックを付ける。
一貫性は無いんだが、この方が見やすい気がするので。

391剛万太郎 ◆8/MtyDeTiY :03/03/03 19:12
>>338
早抜けできるときは早抜けにして判断文が長くならないようにするのはどう?
if(foge.isFuga()){
 return false;
}
if(foo.bar()!=FOO_BAR){
 return false;
}
//ここまでこれたら処理をする
return true;
392 ◆8/MtyDeTiY :03/03/03 20:30
// 俺式。
boolean r = true;
r &= foge.isFuga();
r &= foo.bar() != FOO_BAR;
if( r ) {
// なんか処理
}
return r;
393仕様書無しさん:03/03/03 20:45
なんか違う…
394仕様書無しさん:03/03/03 20:47
bool値に論理演算しとる香具師が居る・・・
なるほど、この会社辞めようよおもったソースコードか。
395剛万太郎 ◆8/MtyDeTiY :03/03/03 20:48
>>392 うわ、トリップが
396仕様書無しさん:03/03/03 20:50
>>395
自演失敗。ゴクローサン。
397仕様書無しさん:03/03/03 20:51
bool値の中の値も大変だな
Cにはbool値などいない!
398剛万太郎 ◆8/MtyDeTiY :03/03/03 20:52
>>396 >392は俺じゃないよ
399剛万太郎 ◆OPb3r6Vs1g :03/03/03 20:55
トリップ変更
400仕様書無しさん:03/03/03 20:57
なんだ乗っ取られたのか。マヌケだな(w
401392 ◆8/MtyDeTiY :03/03/03 20:59
>>398
あ、とりっぷカブタネ。すまん。
つか &&= なんて演算子ないし...
402剛万太郎 ◆OPb3r6Vs1g :03/03/03 21:02
>>401 なんて単純なトリップ付けるんだよ。
403仕様書無しさん:03/03/03 21:05
>>402
おまえが言うな(w
404剛万太郎 ◆OPb3r6Vs1g :03/03/03 21:08
しまった。新しいトリップも単純だ
405仕様書無しさん:03/03/03 21:29
>>390
 && を上に持ってくるとインデントがそろって綺麗だと思うけどいかが?

>>392
 ネタなら無視してね。

 true は普通、非0値だと思うけどこれで良いの?
 なんか常にrは真な様な気が...
 
406仕様書無しさん:03/03/03 22:24
なんか宗教論争に発展しそうだ
荒れないといいけど・・・

といいつつ
@if(...
&& ...)

Aif(... &&
...)
だけど私はAはかな
そっちのほうがなんかすっきりする、感覚の問題だろうけど
407 ◆SEE7n9Y/L2 :03/03/03 22:25
test
408仕様書無しさん:03/03/03 22:29
>>406
おれの場合はどっちかというと(1)だなあ。
論理式が継続してる感じがする、って程度の根拠なんだけど。
仕事で(2)でやれ、といわれたらあんまり抵抗なく「わかりました」っていうな。
409仕様書無しさん:03/03/03 22:29
とりあえず私は複数行書く場合は↓ですね

if(
foge.isFuga() ||
foo.bar()!=FOO_BAR
){
 return false;
}
//ここまでこれたら処理をする
return true;
410仕様書無しさん:03/03/03 22:33
>>409
見難いと思うけど。
411仕様書無しさん:03/03/03 22:38
>>410 禿動
412仕様書無しさん:03/03/03 22:38
>>406
昔は1.だったけど、「コードコンプリート」を読んでから2.にしました。
演算子が最後に書いてあると次行以降に続くことが明確になる、という
説明を読んでなるほどと思ったものです。
413仕様書無しさん:03/03/03 22:44
>>412
コッカが無い時点で次行以降に続くことは明白である。
次行の先頭に演算子が無いと、その行が実行文かどうか一目見てわからん。
毛唐の戯言如きでスタイルを変えてしまうのは自分の頭で考えていない証左。
414409:03/03/03 22:45
そうですか…私はこれでずっと書いてて慣れてしまったから見やすいんですけど

あ、それと
@if(...){
}
Aif(...)
{
}
ですが、Aは全く使わないですね
どうもこう…Aで書かれたものを読んでいると、なんかしっくりこないというか…
感覚的なものでしょうけど避けてしまっている
415仕様書無しさん:03/03/03 22:46
この宗教論争はコーディング規約とゆう名がつくよな。
漏れ適にはどうでも良いんだけど、どっかで決めてくれねぇかなぁ。

最近どこの現場行っても、無いから決めさせられるんだよね。
で、原案提示してからそれについてなんだかんだの会議が有ってさ。
どーでも良いといいつつ409は嫌だが...
416仕様書無しさん:03/03/03 22:49
>>415
そんなに >>409 を嫌わなくても良いじゃないか・・・
417仕様書無しさん:03/03/03 22:51
>>414
 漏れもそうだったけど、規約で決まって半年やったらAに慣れて
@が馴染めなくなってもうた。(漏れ415ね、会議で押し切られた)

 その程度のもんだよん。

 
418仕様書無しさん:03/03/03 22:52
>>416
 あれで書きたい?
419仕様書無しさん:03/03/03 22:53
混在してるのでどうでもいい。
420仕様書無しさん:03/03/03 22:58
>>419
混在してるのはよくない

多分どっちの派閥からもこうつっこまれるぞ(w
421仕様書無しさん:03/03/03 23:05
>>420
でも他人のソースを勝手に整形するのもねぇ。
一応コーディング規約もあるにはあるが、色んな業者が入り乱れてるわ、
ライセンス買ってソース持ってくるわで、厳密に守る事が出来なくて、
整形作業(indent通すとか)自体が無駄な時間になってしまうんだわ。
422仕様書無しさん:03/03/03 23:11
>>421
 規約守んない害虫は許せんな。
 漏れも害虫だけどさ、ルールは守るぞ。
 伝達系統に問題有りと見た。
423仕様書無しさん:03/03/03 23:36
>>413
コッカ言うな
424仕様書無しさん:03/03/04 00:08
カッコ <-> コッカ
ケース <-> スーケ
425仕様書無しさん:03/03/04 00:14
コンマ
 ↑
 |
 |
 |
 ↓
カンマ
426仕様書無しさん:03/03/04 00:19
case ⇔ esac
if ⇔ fi
427仕様書無しさん:03/03/04 00:22
>>425
マン○にしなかったとこがお前の良心か?
428仕様書無しさん:03/03/04 00:41
マンコ>>>>>>(越えられない壁)>>>>>カンマ>>>>コンマ
429仕様書無しさん:03/03/04 02:31
C++なら↓が、結構いけてると思うんだが、どうよ?
ttp://groups.yahoo.com/group/boost/files/coding_guidelines.html
430 ◆8/MtyDeTiY :03/03/04 15:37
#define continue_to_next_line_at_AND 1
#define continue_to_next_line_at_OR  0


if( foo.IsHoge() && continue_to_next_line_at_and
    && bar.IsHoggeee() ) {
431仕様書無しさん:03/03/04 18:54
>>430
突込みどころはここじゃないだろうけど
大文字小文字間違ってるね>AND, and

#ifdef continue_to_next_line_at_USEXXX    // ANDならUSEXXXを定義、ORなら定義せず
#define continue_to_next_line_at_XXX 1
#else
#define continue_to_next_line_at_XXX 0
#endif

if( foo.IsHoge() && continue_to_next_line_at_XXX
&& bar.IsHoggeee() ) {


どうせやるならこんな感じでやれよといいたいんだよね?
ん・・・ちょっと違うかな?
432仕様書無しさん:03/03/04 19:00
このコードが良いか悪いか別にして

if( continue_to_next_line_at_XXX && foo.IsHoge()
&& bar.IsHoggeee() ) {

こうする方がいいね・・・
433仕様書無しさん:03/03/04 19:07
>>430-432
それって「この会社辞めようと思ったソースコード」だよな。
434仕様書無しさん:03/03/04 19:13
そんなことするぐらいなら、
if( foo.IsHoge() /* 次の行に続く */
&& bar.IsHoggeee() ) {
のほうがまし。
435仕様書無しさん:03/03/04 19:34
>>434
いまごろ、そんなことが出来るんだと感心してまつ。
436仕様書無しさん:03/03/04 19:58
>>434
無駄なコメントは不要。
437 ◆8/MtyDeTiY :03/03/04 21:04
>>436
いやコメントのほうがcontinue_to_next_line_at_ANDマクロよりマシ、ってことだろ。
438仕様書無しさん:03/03/04 22:43
>>434
・・・いや、それだと
430のいいたいのと違うような気がする

>>if( foo.IsHoge() && continue_to_next_line_at_and
>>&& bar.IsHoggeee() ) {

これがいいたいのはcontinue_to_next_line_at_andが場合によっては
continue_to_next_line_at_orになりますよと
いいたいんじゃないかな

例えばデバッグビルドの場合はcontinue_to_next_line_at_and、
リリースビルドの場合はcontinue_to_next_line_at_orになるとか
変える時は一括して置換するとかで

それともやはり単に条件判定を続けるかどうかなのかな?
それなら434のでいいわけだが
439仕様書無しさん:03/03/04 22:45
× それともやはり単に条件判定を続けるかどうかなのかな?
○ それともやはり単に条件判定がさらに続きますよという意味なのかな?
440仕様書無しさん:03/03/04 22:48
と思ったらcontinue_to_next_line_at_andって意味書いてあるな



俺もだめぽ。。。
441仕様書無しさん:03/03/04 22:53
おまいら、難しく考え過ぎでつ。
コードは明快であるべき。
442仕様書無しさん:03/03/04 22:59
行頭揃える方が手間が少ないので(1)に1票。>>406

if ( hoge==0 &&
foooooooooooooooooooooo==0 &&
bar==0 )

こんなん見づらいし、タブ等で揃えるのも手間がかかる。
(PGたるもの手間を惜しむべし)
443仕様書無しさん:03/03/04 23:01
>>442
> こんなん見づらいし、タブ等で揃えるのも手間がかかる。
IDEかまともなエディタ使えよ。
444仕様書無しさん:03/03/04 23:03
>>443
そーゆー問題じゃ無ぇだろ。アフォですか?
445仕様書無しさん:03/03/04 23:05
>>444
手間を気にしてるだろ。日本語読めませんか?
446仕様書無しさん:03/03/04 23:08
>>445
本末転倒だろ。日本語読めませんか?
447仕様書無しさん:03/03/04 23:11
>>444 >>446
ただの荒らしだろ。消えな。
448仕様書無しさん:03/03/04 23:11
能も無いのにケンカすんな
449仕様書無しさん:03/03/04 23:19
>>447
>>448
IDEやエディタに整形させるなら、行頭でも行末でも変わん無ぇだろ。
まともな意見も書けないならクンナヨ。
450仕様書無しさん:03/03/04 23:37
>>449
整形後の話だろ。整形後行頭や行末はダメに決まってる。
あんた最初っから混乱していたみたいだね。
451仕様書無しさん:03/03/04 23:41
449だが、整形の為にIDEやエディタを持ち出してきたのは
>>443 なので、一生懸命突っ込んでいるわけだが。
452仕様書無しさん:03/03/04 23:44
>>451
まともなエディタなら整形するまでもなく揃うじゃん。
そんなことも知りませんでしたか?
453仕様書無しさん:03/03/04 23:47
>>452
その揃える動作を整形と言うのですが・・・
454仕様書無しさん:03/03/04 23:48
たかだかインデントのあるなしくらいの問題で
何時間も上司に説教されたとき。
455仕様書無しさん:03/03/04 23:50
>454

気持ちは分かるが

この会社辞めようと思った上司の一言#7
http://pc.2ch.net/test/read.cgi/prog/1040889506/l50

こっちのネタだ。
456仕様書無しさん:03/03/04 23:51
>>453
だから>>442でも別に問題ないってことだろ?
457仕様書無しさん:03/03/04 23:51
>>454
逝って良し
458仕様書無しさん:03/03/04 23:56
>>456
>>442の書き方は俺は嫌いです。
>>443の意見が気に食わないだけです。
459仕様書無しさん:03/03/04 23:58
>>458
理由はなんとなくですか?(w
460仕様書無しさん:03/03/05 00:12
お願いだ、strtok()をライブラリの中で勝手に使わないでくれ…!
461仕様書無しさん:03/03/05 00:16
>>460
strtokとstrtok_rが分かれているようなシステムですか?
462仕様書無しさん:03/03/05 00:17
>>460
いいじゃん。別に。
463仕様書無しさん:03/03/05 00:19
startrek()なら...
464仕様書無しさん:03/03/05 00:19
>>443
行末の演算子を揃えてくれるエディタやIDEを知ってるなら教えてくれ。
できれば編集して位置がずれても、自動で修正してくれる奴。
465仕様書無しさん:03/03/05 00:19
>>463
ヒソヒソする気にもなれん!
466仕様書無しさん:03/03/05 00:21
JavaScriptで
onKeyDownとonKeyPressの違いを理解してくれなかったとき。
467460:03/03/05 00:40
>>461-462 え?

for (p = strtok(str, ","); p !=; p = strtok(NULL, ",")) {
foo(p);
}

で、foo()の中でstrtok()使われていたら困らない?
468仕様書無しさん:03/03/05 00:44
>>460
なるほどそれはこまるね。
ここんとこstrtok()はぜんぜんつかわんから、かんがえもしなかった。
469460:03/03/05 00:44
// すまん 、訂正。
for (p = strtok(str, ","); p != NULL; p = strtok(NULL, ",")) {
foo(p);
}
470仕様書無しさん:03/03/05 07:54
つまりstrtok_r()があれば問題無いってことだろ。
別にstrtok()に限った話でもないし。
471仕様書無しさん:03/03/05 08:27
>>434
foo.IsHoge() が true だった場合、continue_to_next_line_at_AND の値によって
bar.IsHoggeee() が呼ばれたり呼ばれなかったりする。
bar.IsHoggeee() が副作用を起こすメソッドだった場合に(゚Д゚)マズ-。
普通、関数名からして副作用が起こることはまずないが、こんな素敵なコードを書く奴を
信用してはいかん。
472仕様書無しさん:03/03/05 14:20
>>471
if( f1() ) {
    if( f2() ) {
        f3()
のような処理が、
f1() && f2 && f3();
と等価であることは、Cプログラマの常識だと思うんですけど。
また、普通のCプログラマは、後者を好むと思うんですけど。
473仕様書無しさん:03/03/05 14:43
>>472
「副作用」について勉強し直してくダサイ。
474仕様書無しさん:03/03/05 14:47
まぁ、稼動しているなら触れない方がベストだな。>>472
()が抜けてるよ。
475仕様書無しさん:03/03/05 14:52
>>473
「短絡評価」について勉強し直してくダサイ。
476仕様書無しさん:03/03/05 15:17
>>475
いや、>>472 の内容と「短絡評価」については正しいんだけどさ。
>>471 は「f3() が副作用を起こす場合」という条件付なんだから、
突込みどころがズレてるんじゃないんかい、と・・・。
477仕様書無しさん:03/03/05 15:45
>>476
そうだね。 >>471 への突っ込みは
「Cが短絡評価なのは極アタリマエ。普通の、信頼のおける
 Cプログラマは、論理演算が短絡評価であることに依存してコードを書く。
 何?おまえ最近まで知らなかったの?」
くらいでいいよね。
478仕様書無しさん:03/03/05 15:47
副作用ですか・・・よく分からなかったのでちょっと検索してみたけど結構あるんですね

ここで言われてる副作用っていうのは
@---------------
if(A){
 if(B){
  if(C){
   ...
}}}
-----------------
A---------------
if(A && B && C)
 ...
-----------------

@はA→B→Cと確実に判定が行われていくけれど
AはA→B→CではなくA→C→B、C→B→Aになったりする場合があるということでしょうか?

↓のサイトによるとコンパイラに依存するみたいなこと書かれていますが
ttp://www.st.rim.or.jp/~phinloda/cqa/cqa7.html

私は@は避けてAの条件文を多用していますが今のところ問題はないです
当方VisualC++6.0Pro(SP5)使ってますが
近々VC.net Proの方にしようと考えてるけれどちょっと不安になってきた
479478:03/03/05 15:55
ん・・・ちょっと的外れなレスしてしまったみたい
↓のサイトの方に載ってることでいいのかな
ttp://web.sfc.keio.ac.jp/~hattori/prog-theory/main_c5_s1.html#doc1_1088
480仕様書無しさん:03/03/05 16:04
ちなみにC++も論理演算って短絡評価ですよね?
481仕様書無しさん:03/03/05 16:17
>480
そだよ。 あと、Javaもperlもbashも。
482仕様書無しさん:03/03/05 16:19
>>480
C++だと、operator&&を定義してやると短絡評価じゃなくなってしまう罠。
483仕様書無しさん:03/03/05 17:16
逆に短絡評価でない言語は何でしょう?
VB以外にありまつか?
484仕様書無しさん:03/03/05 18:06
Delphiはオプションで決められます
485仕様書無しさん:03/03/05 18:12
書き方じゃなくてオプションでかよ。やな言語だな。
486仕様書無しさん:03/03/05 18:43
短絡評価に依存したコードは書きません
487仕様書無しさん:03/03/05 18:57
>>484
>>485
オプションで決められるという事は、
言語仕様として評価方法が決まって無いと言う事で、
嫌な言語だと思う。
でも、書き方で評価方法が変わる言語というのも、
嫌な言語だと思う。
488仕様書無しさん:03/03/05 19:21
新入社員の質が落ちていることに気が付いたとき。


新卒にA4用紙1枚に頭でプログラミングしてもらおうとオモタ。

■下記余白を利用して創造性あるプログラムコードを記述してください。
                          (言語は問わないものとする)
$
$ #include <iostream>
$ int main {
$ cout << "Hello C++ world !";
$ return 0;
$ }
$

とか、

$
$ 頭で考えてプログラムを組めません。
$

これが、現実だから少し困った。
これからの教育方法を見直す前にこの会社を辞めてみたい。
                          (;´д`)トホホ
489仕様書無しさん:03/03/05 19:27
>>488
面白い問題ではあるけど、業務の一環でやらせるなら
まず仕様を決めろよ。
490仕様書無しさん:03/03/05 19:27
この遅さならテスト出来る。

>>489,489,489,489,489,489,489,489,489,489,489,489,489,489,489
>>489,489,489,489,489,489,489,489,489,489,489,489,489,489,489
>>489,489,489,489,489,489,489,489,489,489,489,489,489,489,489
>>489,489,489,489,489,489,489,489,489,489,489,489,489,489,489
>>489,489,489,489,489,489,489,489,489,489,489,489,489,489,489
>>489,489,489,489,489,489,489,489,489,489,489,489,489,489,489

                  どうなるだろう。ワク(=´ー`=)ワク
491仕様書無しさん:03/03/05 19:29
再チャレンジ。

>>491,491,491,491,491,491,491,491,491,491,491,491,491,491,491
>>491,491,491,491,491,491,491,491,491,491,491,491,491,491,491
>>491,491,491,491,491,491,491,491,491,491,491,491,491,491,491
>>491,491,491,491,491,491,491,491,491,491,491,491,491,491,491
>>491,491,491,491,491,491,491,491,491,491,491,491,491,491,491
>>491,491,491,491,491,491,491,491,491,491,491,491,491,491,491

           みなさん。ご迷惑おかけします。((*_ _)ペコリ
492仕様書無しさん:03/03/05 19:36
>>488

>$
>$ #include <iostream>
>$ int main {
>$ cout << "Hello C++ world !";
>$ return 0;
>$ }
>$
何気に、間違ってるところが凄い。(;´д`)
493仕様書無しさん:03/03/05 19:43
ノイマン型コンピュータに創造性のあるプログラムなんて組みこめるわけないだろ。
494仕様書無しさん:03/03/05 19:43
>>489
おっしゃる通りです。仕様は決めておくべきでした。
もしかして、うちを受けられた際の不満とか?
それはないですよね。チッチャイ会社ですから。

>>490-491
>>491を自分で確認すると無限にメッセージ枠が
発生している事に気が付いた。"/(;-_-) イテテ・・・
カガミにカガミを映したとき
テレビカメラで撮影確認モニタを映したとき
のように、なっている。

なお、公開しているプログラムではないのでご安心を。(´▽`)


>>492
チラミ程度?で気がつくあなたはモットすごいです。(・∀・)ニヤ

$
$ #include <iostream>
$ using namespace std;
$
$ int main() // ←
$ {
$ cout << "Hello, C++ \n";
$
$ return 0;
$ }
$

と、私ならします。
495仕様書無しさん:03/03/05 19:45
>>493
そこを、あなたの力で何とか…。
              無理ですかね?(ニッコリ
496仕様書無しさん:03/03/05 20:37
Get工学系大学新卒
Set中途経験者
End漏れ(´・ω・`)ショボーン
497仕様書無しさん:03/03/05 20:38
cout << "Hello, C++ \n";

cout << "Hello, C++ " << endl;
ってどっちが一般的なんだ?
498仕様書無しさん:03/03/05 20:42
>>497
cout << "Hello, C++ \n";
で(゚з゚)イインデネーノ?
499仕様書無しさん:03/03/05 21:25
>>488
は採用試験なら面白い(やる気、経験などを判断するよい材料になる)と思うんだが、
新人教育用のネタとしては全然駄目だろう。
単発でそういう「テスト」をすることにいったいどんな教育効果があるのか
考えてみてちょ。新人のレベルに応じた適切な入力・導きを与えられて
いないだけに見える。
500仕様書無しさん:03/03/05 21:51
何かすげー死にたくなった。
501仕様書無しさん:03/03/05 22:01
>>500
何故age
502仕様書無しさん:03/03/05 22:27
>>494
> $ int main() // ←
やれやれ…
503 ◆void.88Fi. :03/03/05 23:15
呼んだ?
504仕様書無しさん:03/03/05 23:21
別に・・・
505仕様書無しさん:03/03/05 23:41
>497

そりゃ状況次第だろ。
……一応聞くが、 cout << "hoge\n"; と cout << "hoge" << endl; が
どう違うのか、は分かってるよな?
506仕様書無しさん:03/03/05 23:52
ワカリマセン

結果ハ一緒ダヨネ
507仕様書無しさん:03/03/06 00:04
endlは"\n"を出力した後にバッファをフラッシュするから、
この場合は関係ないけど、プロセスを直ぐに終了しない場合は違ってくることがある。
508仕様書無しさん:03/03/06 01:14
>>487
いちおPascalは短絡評価しないことになってます。
DelphiをPascalの一種として取り扱っていいのかどうか疑問ですが。
509仕様書無しさん:03/03/06 01:36
497は一般的の意味を明らかにすれば?
バッファをいちいちフラッシュさせるのが一般的なのか、
ためにためて効率を上げるのが一般的なのか、によって変わるし。
510仕様書無しさん:03/03/06 01:50
そういえば俺フラッシュって全然使ってないや>fflushやらgdiflushやら
やっぱやらな駄目かな?

その内暴走するかな、俺のプログラム。。。
511仕様書無しさん:03/03/06 07:58
>>510
うごいてるなら問題ないかと思われ。
動かなくなった時、原因がわかりにくいが。
512仕様書無しさん:03/03/06 08:29
引っ張って、アレだが、
>>488 の模範解答が見たい。
513 ◆2XvfYerxhs :03/03/06 08:52
>502
(・∀・)ニヤニヤ

>496
Endと言うより、Cutかと・・・。
いずれにしても、お疲れ様でした。
514仕様書無しさん:03/03/06 09:22
>>488の模範解答

#include <stdio.h>

void main(void)
{
  fopen("con\lpt\sayonara.com","r");
  printf("\n\b\b");
}
515仕様書無しさん:03/03/06 09:32
#include "/dev/tty"

だろう。
516仕様書無しさん:03/03/06 11:24
#include "con/con"
517仕様書無しさん:03/03/06 12:09
$ #include <iostream>
$ int main {
$ cout << "Hello C++ world !";
$ return 0;
$ }

おしい!! 3行目は std::cout << "Hello C++ world !"; だ

って、そういう問題ではないの?
518仕様書無しさん:03/03/06 12:27
>>517
> $ int main {
519 ◆8/MtyDeTiY :03/03/06 13:13
だからお前ら創造性をだなぁ...
520仕様書無しさん:03/03/06 14:26
まぁ、新入社員用に配られたCのテキストみたら、いきなり

void main()

とか堂々と書いてあるよりはましかと
521仕様書無しさん:03/03/06 14:31
いや、int main { よりは void main() { の方がまだマシだと思うが。


一応コンパイルできるから。
522 ◆8/MtyDeTiY :03/03/06 14:45
つか、>>488 に書いてもらいたい。
523仕様書無しさん:03/03/06 20:25
int main (int argc, char *argv[])
{
  system ("make world");
  return 1;
}
524仕様書無しさん:03/03/06 20:49
#define TRUE 0
#define FALSE (!TRUE)

デスマの悪寒
525仕様書無しさん:03/03/06 23:22
>>524
#define True 1
#define False 0
で対抗するんだ!命を守るにはそれしかない!!!!
526仕様書無しさん:03/03/06 23:24
>>525
>>524に対抗するなら、
#undef TRUE
#define TRUE 1
#undef FALSE
#define FALSE 0
だろ?何が問題になってるのか、はっきり認識しろよ。
527仕様書無しさん:03/03/06 23:40
//#define TRUE 0
#define TRUE 1
#define FALSE (!TRUE)

これじゃダメですか。そうですか。
528仕様書無しさん:03/03/06 23:53
#define TRUE 1 //0
#define FALSE (!TRUE)
529仕様書無しさん:03/03/06 23:56
何ループしてるんだい。
面白そうだから俺も混ぜてくれよ。
で何を書けばいいんだい。
530仕様書無しさん:03/03/07 00:02
(この会社辞めようと思った)創造性あるプログラムコードを記述してください。(言語は問わないものとする)
531仕様書無しさん:03/03/07 00:11
#if TRUE == 0
#error 氏ねヴォケ
#endif
532仕様書無しさん:03/03/07 00:15
>>531
このチェッカ良いね(w
533仕様書無しさん:03/03/07 00:20
VBなんだけど。
御願いだからコントロールには名前をつけて下さい。
Command1とか、Text1とか、フォームに貼り付けたままで放置はやめて下さい。おながいします。
534仕様書無しさん:03/03/07 01:28
ソースコードではないが、同名で全く内容の違うソースファイルが
複数発見されたときは深い悲しみに襲われたものだ・・・。
535仕様書無しさん:03/03/07 02:50
>>534 
これは、この取引先とは手を切ったソース管理なんだけど聞いてくだされ。

取引先の開発途中(PG失踪)のプログラム数本を引継いでくれと依頼される。
あっちこっちのディレクトリに、同名で内容が微妙(ここポイント)に違う
ソースファイルが入り乱れて多数発見される。更新日時も入り乱れ(ん?)
一番新しいソースがあるディレクトリが、最終的なものとも言いきれないロジック。
深い憎しみに襲われたものだ・・・。
536仕様書無しさん:03/03/07 09:32
>>535
「取引先の PG 失踪」ってだけで、すでに士気萎え萎えだわな  (*´▽`)ハァーー
537仕様書無しさん:03/03/07 12:48
#define TRUE 0
#define FALSE (!TRUE)
#undef TRUE
#define TRUE

int IsZero( int a ) {
return a == 0 ? TRUE : FALSE;
}
538仕様書無しさん:03/03/07 13:56
>>534
うちはそんなものゴロゴロあるぞ。
539仕様書無しさん:03/03/07 14:52
>>535
ごめん。漏れ、それで今、苦しんでいる。

ちょっとしたライブラリ(つか、関数群)を作った。を、便利便利
この仕事で使った。仕事は終了〜。

次の仕事が始まった。あ、あのライブラリ使おう。ちょっと機能を追加しておこう。
この仕事も終わり〜

新たな仕事が始まった。お、あのライブラリが使えるな。ごそごそ。げ、バグ見つけちゃった。
前の仕事には影響しないバグだけど、一応直しとかないとな。
この仕事もおわり〜

んなことを繰り返しているうちに、種々雑多なバージョンが入り乱れてしまい、今では、「あの
ライブラリを使おう」と思っても、「はて、どのディレクトリにあるのが最新版なのだろう」と
お仕事フォルダを全検索して、ファイルの更新日付で確認しなければならない始末。
全部一本化すれば良いじゃないかと思うだろうが、最新版のソースは、機能追加、プログラム
修正を繰り返したせいで、一番最初の仕事で作ったプログラムでは動作しないという体たらく……。

ごめんな、引き継ぐときは、何とか整理してから引き継ぐからな。(無理だと思うけど)


540仕様書無しさん:03/03/07 15:18
CVSツカエ。
541仕様書無しさん:03/03/07 15:48
>>540
激しく同意 ;-)
542仕様書無しさん:03/03/07 16:15
>>541
禿同に一票  ( ・∀・)つ◇
543535:03/03/07 19:35
>>539
う〜ん、そうでしか。だけど、ありがちだよね。
こういうのは、割り切るしかないよね。
プロジェクトが違ったら、ましてや、リリース後なら諦めて
それぞれ育てていくのが正解かな。
よっぽど低レベルなライブラリなら統一する考慮必要だと思うけど。

「この程度の修正ならBプロジェクトやC、D・・・プロジェクトに影響しないだろう。」
な〜んて、総合テストの時間なんか確保できないのに
全部綺麗に統一してしまいたい衝動にかられるけど我慢しる。
他のプロジェクトもリリース前で総合テストまで時間がとれるなら別だけどね。
コード管理ツールにも限界はある。使う側がしっかりしないとね。
544仕様書無しさん:03/03/07 19:46
Subversionってどう?
545仕様書無しさん:03/03/07 23:55
>>539
漏れも昔DQNプロジェクトで似たような経験をしてるから分かる。
CVSを使うにしても、どういう戦略でbranch管理をして、幹にマージしていくか
という点をきっちりしていないと同じ目にあうと思う。

1) Henry SpencerのオリジナルのRegexパッケージがありました
2) Tcl/Tkでは1)に一部Tcl/Tk用改変を加え、利用しました
これは1)とは互換性がありません
3) apacheでは2)のTcl/Tkに特化した部分を削除し、ebcdicパッチを
加えました。これは2)とは互換性がありません
4) *BSDでは1)を改変したものをlibcのregex(3)として利用しています。
これは2)3)とは互換性がありません
5) nvi-m17nでは4)に対してマルチバイトパッチを当てて利用しています。
これはnvi-m17nの内部コードを対象としているので一般的に利用できる
ものではありません。もちろん2)3)4)とは互換性がありません
とか。
546仕様書無しさん:03/03/08 00:20
>>539
あはは。あるある。
最後にやった仕事のソースから掘り出してきたのが最新!
547仕様書無しさん:03/03/08 00:46
>534

あー、その。各プログラムの主処理モジュールを全部

main.cpp

にしたのはやっぱマズーでしたか(ぉぃ
548仕様書無しさん:03/03/08 09:25
>>547
誰か途中で止めなかったのかよ
549仕様書無しさん:03/03/08 12:58
>547
無茶しやがって(AA略
550仕様書無しさん:03/03/08 19:00
>>547
普通は絶対にしない。

ただ、外注から上がってきたソースってそんなのが多いんだよ。
( とっとと取引やめてくれ > うちの会社 )
何考えてプログラマやってんだろうね。
551仕様書無しさん:03/03/08 19:27
>>550
多分それ、その外注企業の規約なんだと思うよ。
552550:03/03/08 20:01
>>551
「解読しづらいコードを書いて、権利を相手に渡すな」とか
規約で決まってるのかと疑いたくなるソースばかりで
>>551が冗談には聞こえないんだが・・・
553仕様書無しさん:03/03/08 21:38
534だが、俺が見たのも外注からのソースでした。ああ・・・
554害虫業者:03/03/09 10:11
思うだけじゃなくハッキリ言ってやってくれ。
下っ端の漏れがいくら言っても、上司は耳をかさねぇ。

あまりの酷さに漏れが直そうとすると、DQN上司は
「動いてるモノに余計な修正加えるな。品質が下がる」とか言うし。

んで作る前に防止しようと色々提言しても、
「仕様にないことまでやる必要はない」と断言。
555仕様書無しさん:03/03/09 12:21
>>554
だよね。
ほんとは、やるべきことをやった方が、
「仕様ににあるものを作る」ことが効率化されるのにね。
556仕様書無しさん:03/03/09 12:43
てゆーか、まず仕様の変更をしないかな。そーゆーときは。

部下がいっつも思いつきで「これがいい」って思ったものを
実装するから困っちゃうよ。ちゃんと検討して最終的に必要
と決まったものだけを実装してくれよ。
 どんなにいいものでも予算の都合上できないことはあるん
だよ。わかってくれよ。
557仕様書無しさん:03/03/09 13:55
>554
上司の言い分も間違っていないとおもうよ。
余分なことをする時の義務と責任を考えてみてくれ。
558仕様書無しさん:03/03/09 14:19
上司に言うんじゃなくて、クライアントに言うべきだと思うんだが。
559仕様書無しさん:03/03/09 17:26
//csv fileにてアドレス帳DATAを作成する。//

#include <iostream>
using namespace std;
int main(){
FILE *fp;
fp = fopen("docomo.csv","w");
fprintf(fp,"電子メール アドレス\n");
int b;
for (b = 0 ; b <= 99999999 ; b++){
if (b >= 0 && b < 10){fprintf(fp,"0900000000%[email protected]\n",b);}
if (b >= 10 && b < 100){fprintf(fp,"090000000%[email protected]\n",b);}
if (b >= 100 && b < 1000){fprintf(fp,"09000000%[email protected]\n",b);}
if (b >= 1000 && b < 10000){fprintf(fp,"0900000%[email protected]\n",b);}
if (b >= 10000 && b < 100000){fprintf(fp,"090000%[email protected]\n",b);}
if (b >= 100000 && b < 1000000){fprintf(fp,"09000%[email protected]\n",b);}
if (b >= 1000000 && b < 10000000){fprintf(fp,"0900%[email protected]\n",b);}
if (b >= 10000000 && b < 100000000){fprintf(fp,"090%[email protected]\n",b);}
}
return 0;
}
560仕様書無しさん:03/03/09 17:36
//csv fileにてアドレス帳DATAを作成する。//

#include <iostream>
using namespace std;
int main(){
FILE *fp;
fp = fopen("docomo.csv","w");
fprintf(fp,"電子メール アドレス\n");
int b;
for (b = 9000000000 ; b <= 9099999999 ; b++){
  fprintf(fp,"0%[email protected]\n",b);
//if (b >= 0 && b < 10){fprintf(fp,"0900000000%[email protected]\n",b);}
//if (b >= 10 && b < 100){fprintf(fp,"090000000%[email protected]\n",b);}
//if (b >= 100 && b < 1000){fprintf(fp,"09000000%[email protected]\n",b);}
//if (b >= 1000 && b < 10000){fprintf(fp,"0900000%[email protected]\n",b);}
//if (b >= 10000 && b < 100000){fprintf(fp,"090000%[email protected]\n",b);}
//if (b >= 100000 && b < 1000000){fprintf(fp,"09000%[email protected]\n",b);}
//if (b >= 1000000 && b < 10000000){fprintf(fp,"0900%[email protected]\n",b);}
//if (b >= 10000000 && b < 100000000){fprintf(fp,"090%[email protected]\n",b);}
}
return 0;
}
561仕様書無しさん:03/03/09 18:15
>>559-560
ワラタ

しかしコメントアウトした方は流れるような感じがしていいなあ(w
562559:03/03/09 18:24
>>560
(・∀・)ニヤニヤ
563仕様書無しさん:03/03/09 18:24
SPAM業者のプログラムか?
564559:03/03/09 18:25
>>563
それっぽい。( ̄ー ̄)ニヤリッ
565559:03/03/09 18:26
しかし、古いね…。(゜m゜*)プッ
566仕様書無しさん:03/03/09 18:38
>>556
仕様変更も、仕様変更のための検討もせーへん。
つーかそのDQN上司、独断多すぎなんだよナ。
レビューもほとんどやらんし。

>>557
コーディング前の修正より、テスト後の修正の方が面倒な事くらいわかるだろ。
それともDQN上司を納得させるためだけに、コーディング前に発見できた
バグをテスト時まで放置しろというのか!
567仕様書無しさん:03/03/09 20:09
テストファーストするようになってからバグが格段に減りますた。
もっともテストコードの方にバグがあってハマることもあるけど(w

変なコードを書く前にまずテストコード書け。

とかやってると上司に睨まれたりするんだよなあ。
無駄なコードを書いているとかいって。
いや、大丈夫か。一所懸命コードを書いているようにしか見えんか。
よくわかんないや。おれは上司のいないフリーランス(w
568559:03/03/09 20:11
>>567
羨ましい
569仕様書無しさん:03/03/09 23:07
>566
よく読んでなかったんだが、バグを直すというのかい?
ただ単に気に入らない、見づらいコードを修正するんではなく。

それならその作業(リファクタリング)を実装要件として、ユーザーに認めさせることが先決だな。
そうすれば上司も文句ないだろうし。
570仕様書無しさん:03/03/09 23:41
>>566
似てるわ。漏れのところと・・・。
ウチもDQNのPLがいるんだが、
一緒に仕事することが、既に障害になってる。

>つーかそのDQN上司、独断多すぎなんだよナ。
>レビューもほとんどやらんし。
似てるよ。それ。報告無しでしょ

対処の仕方は、PLをハブンチョして、
直接、顧客から別案件を引っ張ってきちゃった。
で、現在まったりと、別プロジェクトでお仕事してるよ。
571570:03/03/09 23:43
ん?すまん。
スレ間違えたかも・・・。

まぁ。みんなアッチも見てるでしょ。(ご勘弁を)
572仕様書無しさん:03/03/10 03:11
自分の担当の部分の中で明らかに間違ってると思うところがあったので
それを直したら怒られますた

まさか他の部分がその間違いを利用してプログラミングされてるなんて
思いもつかなかったよ(´・ω・`)
573仕様書無しさん:03/03/10 10:07
ん?今までのプロジェクト、主となるソースは全部mainって名前だったけど・・・
まずいのか?
574仕様書無しさん:03/03/10 10:15
....(((゚Д゚;)))ガクガクブルブル

575仕様書無しさん:03/03/10 10:36
> int b;
> for (b = 9000000000 ; b <= 9099999999 ; b++){

このコードが期待通りに動作するコンパイラって、まだ触ったこと無い。

> #include <iostream>
> FILE *fp;
> fp = fopen("docomo.csv","w");

・・・はて?
576仕様書無しさん:03/03/10 11:57
>>559
//csv fileにてアドレス帳DATAを作成する。//

#include <iostream>
using namespace std;
int main(){
FILE *fp;
fp = fopen("docomo.csv","w");
fprintf(fp,"電子メール アドレス\n");
int b;
for (b = 0 ; b <= 99999999 ; b++){
fprintf(fp,"090%[email protected]\n",b);
// if (b >= 0 && b < 10){fprintf(fp,"0900000000%[email protected]\n",b);}
// if (b >= 10 && b < 100){fprintf(fp,"090000000%[email protected]\n",b);}
// if (b >= 100 && b < 1000){fprintf(fp,"09000000%[email protected]\n",b);}
// if (b >= 1000 && b < 10000){fprintf(fp,"0900000%[email protected]\n",b);}
// if (b >= 10000 && b < 100000){fprintf(fp,"090000%[email protected]\n",b);}
// if (b >= 100000 && b < 1000000){fprintf(fp,"09000%[email protected]\n",b);}
// if (b >= 1000000 && b < 10000000){fprintf(fp,"0900%[email protected]\n",b);}
// if (b >= 10000000 && b < 100000000){fprintf(fp,"090%[email protected]\n",b);}
}
return 0;
}
577仕様書無しさん:03/03/10 12:50
>>559
//csv fileにてアドレス帳DATAを作成する。//

#include <iostream>
using namespace std;
int main(){
cout << "通報しますた。" << endl;
//FILE *fp;
//fp = fopen("docomo.csv","w");
//fprintf(fp,"電子メール アドレス\n");
//int b;
//for (b = 0 ; b <= 99999999 ; b++){
//if (b >= 0 && b < 10){fprintf(fp,"0900000000%[email protected]\n",b);}
//if (b >= 10 && b < 100){fprintf(fp,"090000000%[email protected]\n",b);}
//if (b >= 100 && b < 1000){fprintf(fp,"09000000%[email protected]\n",b);}
//if (b >= 1000 && b < 10000){fprintf(fp,"0900000%[email protected]\n",b);}
//if (b >= 10000 && b < 100000){fprintf(fp,"090000%[email protected]\n",b);}
//if (b >= 100000 && b < 1000000){fprintf(fp,"09000%[email protected]\n",b);}
//if (b >= 1000000 && b < 10000000){fprintf(fp,"0900%[email protected]\n",b);}
//if (b >= 10000000 && b < 100000000){fprintf(fp,"090%[email protected]\n",b);}
//}
return 0;
}
578仕様書無しさん:03/03/10 13:01
>>559
//csv fileにてアドレス帳DATAを作成する。//

#include <iostream>
using namespace std;
int main(){
FILE *fp;
fp = fopen("docomo.csv","w");
fprintf(fp,"電子メール アドレス\n");
int b;
for (b = 0 ; b <= 99999999 ; b++){
if (b >= 0 && b < 10){fprintf(fp,"ぬるぽ\n");}
if (b >= 10 && b < 100){fprintf(fp,"ぬるぽ\n");}
if (b >= 100 && b < 1000){fprintf(fp,"ぬるぽ\n");}
if (b >= 1000 && b < 10000){fprintf(fp,"ぬるぽ\n");}
if (b >= 10000 && b < 100000){fprintf(fp,"ぬるぽ\n");}
if (b >= 100000 && b < 1000000){fprintf(fp,"ぬるぽ\n");}
if (b >= 1000000 && b < 10000000){fprintf(fp,"ぬるぽ\n");}
if (b >= 10000000 && b < 100000000){fprintf(fp,"ぬるぽ\n");}
}
return 0;
}
579仕様書無しさん:03/03/10 18:23
いい加減つまんないってことに気が付けっ
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/  
 (_フ彡        /  ←>>578
580仕様書無しさん:03/03/10 22:34
このプログラムの出力は何に入力されるんだろう…
581仕様書無しさん:03/03/10 22:39
582仕様書無しさん:03/03/11 09:53
ファイルサイズ、どのくらいになるんだろ...
583仕様書無しさん:03/03/11 10:27
>>582
それくらい計算しろよ。単純なかけ算じゃねーか。
584 ◆waGr.NDPRU :03/03/11 18:48
void foo1( int i ) {
    // assert( 0 <= i );
    なんか処理;
}

void foo2( struct xxx* ps ) {
    // assert( ps != 0 );
    なんか処理;
}
ずっと、こんな感じでコメントアウト済みの assert() 達。
585仕様書無しさん:03/03/11 20:25
update SYAIN set KIHONKYU_OLD = KIHONKYU
, KIHONKYU = KIHONKYU + floor(((40 - GAKUREI) * (2 + rand())) * 100
586仕様書無しさん:03/03/11 20:43
>>584
-DNDEBUGの呪文を教えてやれや
587仕様書無しさん:03/03/11 22:05
>>586
そのパラメタを何処に書き入れるか教えるのは
大変なことだろうなぁ。 ( ´-`).。oO( だろう… )
588仕様書無しさん:03/03/11 22:35
// #define NDEBUG
589仕様書無しさん:03/03/12 00:42
トロン、プロジェクトXでやるね。
590数行君:03/03/12 05:36
ちとチビッター

#include <iostream>
using namespace std;
int main(){ for(;;){ cout << "\a"; } return 0; }
591仕様書無しさん:03/03/12 05:56
>>590
うるさいよ(w
592仕様書無しさん:03/03/12 06:26
>>589
ぜひシグマをやって欲しいもんだ。
593仕様書無しさん:03/03/12 06:41
失敗したプロジェクトは扱わんだろ。
594数行君:03/03/12 06:44
>>591
どうも本体の方から聞こえてくるんですよ〜。変な音が…。
595仕様書無しさん:03/03/12 11:22
>>540

|1.4 CVS では出来ないこと
|・CVSは管理者の替わりにはならない
| ソースがどのような状態になっているか、を意味的に把握できるのはあくまで人間である。全体の管理は人間が明示的に指示しなければならない。CVSはソースコードの変更は記録するが、その変更内容を決めるのは人間である。

ま、使ったほうがいいのは同意。
でも多分解決しない。
596仕様書無しさん:03/03/12 15:13
Σ、成功したらどうなったのかと
妄想で放送してみてほすぃ
597仕様書無しさん:03/03/13 00:59
名称が最終的に

Σ(°Д°;)

になる。
598仕様書無しさん:03/03/14 17:03

  ∧_∧
 ( ´Σ`)< ぬるぽ
599仕様書無しさん:03/03/14 17:49
>>598 ガッ
600仕様書無しさん:03/03/15 01:57
第一段階:
if(hoge)
{
hoge;
}
else
{
hoge;
}
第二段階:
if(hoge){
hoge;
}else{
hoge;
}
第三段階:
if(hoge){hoge;}else{hoge;}
第四段階:
if(hoge)hoge; else hoge;
第五段階:
hoge?hoge:hoge;
601仕様書無しさん:03/03/15 09:49
>>600

hoge

ですむじゃねーか
602仕様書無しさん:03/03/15 09:58
>>601
たぶんこのコードを削除するとなぜか動かなくなるんだよ
603仕様書無しさん:03/03/15 10:17
>>601

;

ですむじゃねーか
604仕様書無しさん:03/03/15 10:21
605仕様書無しさん:03/03/15 11:46
>>604

exit(0);

ですむじゃねーか
606仕様書無しさん:03/03/15 11:57
コンパイラがgccで、全体を({})で囲っているとか。
607仕様書無しさん:03/03/16 17:28
下がり過ぎage
608仕様書無しさん:03/03/16 17:47
javaで全部static
609仕様書無しさん:03/03/16 18:04
 hoge;

 ;
じゃ駄目だろ。

 hoge; hoge;
じゃないとな。
610仕様書無しさん:03/03/16 19:21
いま共産党関連のシステムを作ってるのですが、
ソースコードを全部左に寄せるように指定されてるので、インデントが使えずにコードが見にくいです

産經新聞のシステムのソースコードはどうなってるのでしょうか?
611仕様書無しさん:03/03/16 19:25
アラビア語BASICで書くことになってます。
612仕様書無しさん:03/03/16 19:40
>>610
それはギャグなの?
613仕様書無しさん:03/03/16 19:42
>>610
右よりだよ

〜〜〜〜〜〜〜〜改行省略〜〜〜〜〜〜〜〜〜〜〜〜

って書いてほしかったんだよね
614仕様書無しさん:03/03/16 22:37
int compute( int num1, char exp, int num2 )
{
   switch( exp )
   {
     case '+':
       return ( num1 + num2 );
     case '-':
       return ( num1 - num2 );
     case '*':
       return ( num1 * num2 );
     case '/':
       return ( num1 / num2 );
     default:
       return -1;
   }
   return -1;
}
615仕様書無しさん:03/03/16 22:43
>>614
すでに辞めてしまった会社で
同じようにCOMPUTE関数を書いていた奴がいたよ。
コボラーが大多数を占めていた会社だったんでね。
よく検収パスできたなと思うようなコードでしたよ。
616仕様書無しさん:03/03/16 22:44
>>614
 ans1 = compute(1, '+' ,-2);
 ans2 = compute(1, '-', 2);
 ans3 = compute(1, '*', -1);
 ans4 = compute(1, '/', -1);
617仕様書無しさん:03/03/16 22:46
>614は……研修課題で電卓作れと言ったら出てきたコード(の一部)か?
新人がそういう条件で書いたんなら、まだましな方じゃねぇ?
(それでも異常ケースの処理はなんとかしてほしいところだが)
618614:03/03/16 22:50
>>617
いいえ、Cに転向したベテランCOBOLerが書いたコードです。
使用法は>>616の通り
619仕様書無しさん:03/03/16 23:37
COBOLerってマジでキモイね
620仕様書無しさん:03/03/17 00:38
>614
自分は来月で2年目になるんですけど、新人研修で電卓アプリ書くのに
そんなコードを書いた記憶があります。戻り値はさすがにintじゃ
なかったのとエラー処理はもう少しましにした記憶がありますが。。。
すみません。これってどのように書くのが一般的なんですか?
621620:03/03/17 00:46
もしかして構文木で式解析みたいな感じで書くのが一般的?
ですと、確かに>614じゃ駄目ですね。当時はそんなの考えもしなかった。泣
622仕様書無しさん:03/03/17 00:59
>>620
evalつかえばそうなに難しいこと考えなくても済むよ。
623仕様書無しさん:03/03/17 00:59
電卓だろ? 式解析なんているのか?
624仕様書無しさん:03/03/17 01:15
>>622
evalはC標準ライブラリになさげで。泣
>>623
課題の電卓の仕様を思い出すと・・・確かにいらなかったです。
ちなみに自分は今でも式解析は本見ないと書けないっぽい。泣
625620:03/03/17 01:17
624は自分の書き込みです。名前入れ忘れました。
626仕様書無しさん:03/03/17 01:25
どうせやるにしても、こっちの方がずっといいと思うけど・・・。

#define COMPUTE

COMPUTE ANS1 = 1 + -2;
COMPUTE ANS2 = 1 - 2;
COMPUTE ANS3 = 1 * -1;
COMPUTE ANS4 = 1 / -1;
627620:03/03/17 02:15
>>626
電卓なんで、数値や演算子は入力から取得するのでそれでは無理かと。
>614が電卓目的で書かれたものかは分からないですが・・・。
628仕様書無しさん:03/03/17 02:19
>>620
マジレスしとくかな。

614のコードは知らない演算子が出てきたときに-1を返すようになってる。
だけど、四則演算やる関数なんで-1を返す可能性もある。
その辺を616は指摘してる。

大体614のように普通は書くだろうが、エラーのときに-1を返すのは
どうしようもない仕様だってことだ。
629620:03/03/17 02:31
>>628
>617で異常ケースの処理は主題じゃないような感じに書かれていたので、
もっと別なところで問題があるのかと思ってました。
ありがとうございます。すっきりしました。
今度の4月入社の人も研修で電卓作るのかな。。。
630仕様書無しさん:03/03/17 02:47
ソースだけだしてみんながCOBOLerのコードだと思うと思った
>>614=>>618がマヌケだということだ。
たぶん電卓とか式解析なんて考えたこともないんだろう。
631620:03/03/17 03:09
COBOL と COMPUTE でググって見たら理由が分かりました。
コードのエラー処理とcompute関数を記述すること自体の複数の問題が
あったんですね。知ってから>626を見ると、なるほど納得します。
ブール値の取り扱いについて。
・bool型は使用禁止。BOOL型を使用する事。
・条件文は、 if ( flag ) や if ( !flag ) のように省略せず、
 if ( flag == TRUE ) や if ( flag == FALSE ) のように
 明示的に記述すること。

…それで本当に良いのかと小一時間
633仕様書無しさん:03/03/21 00:24
flag == TRUEって……。
それは凄い。
634仕様書無しさん:03/03/21 04:34
>>632
俺も以前bool使わずBOOL使ってたなぁ
今は原則的にboolだなぁ
635仕様書無しさん:03/03/21 09:21
typedef double (*compute_t)(double,double);
double compute_add(double a1, double a2 ) { return a1+a2; }
double compute_sub(double a1, double a2 ) { return a1-a2; }
double compute_mul(double a1, double a2 ) { return a1*a2; }
double compute_div(double a1, double a2 ) { return a1/a2; }
compute_t operators[127];
operators['+'] = compute_add;
operators['-'] = compute_sub;
operators['*'] = compute_mul;
operators['/'] = compute_div;
double compute( double a1, char op, double a2 ) {
return operators[op](a1,a2);
}
636仕様書無しさん:03/03/21 09:27
// きっと、こんなのが定義されていたのさ。
class BOOL {
int value;
int operator=( int v ) {
value = v;
}
int operator==( int v ) {
return ( !v == !value );
}
};
637仕様書無しさん:03/03/22 00:56
>>636
残念ながらWinAPIのBOOL。

それはさておき第2弾。

命名規則について (>>632とは別の会社)
・基本単語をアルファベット大文字3文字で表したものと、
 その組み合わせで付ける。
・変換方法は英語とローマ字混在
・名前が被る場合は、末尾に2桁の数字を付ける。
・変数名もファイル名も全てほぼ同じルールを適用(詳細忘れた)
・が、変換の仕方が変数とその他で微妙に違ったりする

(例)
東京 → TKY00
等級 → TKY02 (←連番じゃなかったり…)
東京特許許可局 → 東京・特許・許可局 → TKYTKKKYK

そこでの主な業務はソース修正だったが、たった数行の修正の為に
半日かけてソースを解読せねばならんかったりして、非常に鬱だった。
638仕様書無しさん:03/03/22 01:22
上司の指示でディレクトリ名・ファイル名に全部作成日を付けるとかあったな。
毎日ファイル名が変わるんだよ(;´Д`)。

hoge_2000_09_12/fuga_2000-10-31.c
hoge_2000_09_12/fuga_2000-11-01.c
hoehoe_2000_09_30/
.......
こんな感じで。ソースはお決まりの COBOLic C (ワラ。

俺 「CVS使いましょうよ。前のバージョンに戻したりもすぐにできますよ」
上司「俺そういうの良く分かんないから使いたくない。今の方法でも問題ないだろ?」
俺 「問題ありまくりなんですけど。○○とか××とか…(略)…というわけなんです」
上司「ふーん。それで?」
俺 「そ、それでって…(汗)。CVS を使えば解決できるんですよ」
上司「まー俺が良く分かんないものは使いたくないから。それじゃ(会議という名の雑談会へ)」
俺 「……(ていうか、あんた大してソース書いてへんやん)」

俺はそのプロジェクトが終わった後でソッコーで転職したんだが、去年潰れたらしい…(笑)。
639仕様書無しさん:03/03/22 01:33
漏れの出向先では、逆に命名規則が全然無かった。
とあるコードの扱いが変わるということで現行プログラムの
調査をしたところ、変数名が100種類以上出てきて収拾が
つかなくなった。

最悪だったのは意味が異なる2つの項目に対して
・名称a 名称b
・名称b 名称a
・名称a 名称a
・名称b 名称b
と言った具合に、名称が逆転してつけられていたり、同一
の名称がつけられていたこと。プロパーの連中も人によって
まちまちな名称で呼んでいたため、仕様書を読んだり、直接
説明を受けても、どの項目を指し示しているのかが全く分か
らなかったこと。
640仕様書無しさん:03/03/22 01:38
>>632
しつもーん。
等号の演算結果はboolなんですが、それは TRUEと比べなくていいんですか?

if( (a == FALSE) == TRUE ) )

で、その比べた結果はやっぱりboolなので(ry
641仕様書無しさん:03/03/22 01:47
BOOLの話で思い出した。先日見た、プロジェクト内ライブラリのヘッダ。
ちなみに某UNIX系OS用。

typedef int BOOL;
typedef unsigned long DWORD;
typedef unsigned long HANDLE;


……哀れM$に洗脳された香具師の末路がこれか、とオモタよ……
642仕様書無しさん:03/03/22 01:49
>>640
a != FALSE ならともかく、a == TRUE はマズイよなぁ…。
あと NULL == hoge() とか書く奴うぜぇ。辞めようとまでは思わんが、
辞めさせたくなる(ワラ。
643640:03/03/22 02:02
a == TRUEはまずいが、(a != FALSE) == TRUE はまずくない罠。

>>642
たしかにうぜえ(w
個人的には、trueとか falseとかと比較しているのを見るだけで・・・
何のためのboolなんだと小一時間(ry
644デブおた山崎渉:03/03/22 02:04
  ∧_∧
  ( ´;゚;ё;゚;)<これからも僕を殺して下さいね( ´;゚;ё;゚;)。
=〔~∪ ̄ ̄〕
= ◎――◎                     デブおた山崎渉
645仕様書無しさん:03/03/22 02:16
とあるソースのコメント

・例外キタ━━━━━(゚∀゚)━━━━━!!!!!!
・exitしる!
・レコードがなかったら( ゚Д゚)マズー

これを書いたのは中国人(w
646仕様書無しさん:03/03/22 02:23
>>640
漏れに聞くな漏れに。

>>643
>何のためのboolなんだと小一時間(ry
漏れもそう思ったが、VB出身者に言わせると等号・不等号が
付いてないと分かり辛いらしい。
ここにも魔の手が…と思タYO。
647仕様書無しさん:03/03/22 02:54
C言語の魔の手だな。
bool型が無かったために
数値型を真偽値型として
扱うことに慣れてしまった。
648仕様書無しさん:03/03/22 02:56
>>647 論点違う
649647 補足:03/03/22 03:01
慣れてしまった奴がいる一方、
TRUEと比較するまともな奴が
いるから禁止したのだろうな。
bool型があってifでbool型しか
使えない言語では激しく無意味。
650仕様書無しさん:03/03/22 03:02
>>643
VB流れのヤシとかに
#define TRUE -1
されるとやばくないか?
651仕様書無しさん:03/03/22 03:08
そもそもBOOLとかTRUEとかFALSEとか定義しなくちゃいけない言語がやばい
652仕様書無しさん:03/03/22 03:09
そもそもifでbool以外が使える言語がヤバイ
653仕様書無しさん:03/03/22 03:20
そもそもnullと0とfalseが同じ言語が(ry
654ぬるぽ:03/03/22 04:03
呼んだ?
655仕様書無しさん:03/03/22 04:04
・・・つか、論理値が理解できない奴が(ry
656仕様書無しさん:03/03/22 04:06
  ∧_∧
 ( ´∀`)< ぬるぽ
657仕様書無しさん:03/03/22 04:08
>>656 飽きた
658仕様書無しさん:03/03/22 04:10
そもそもモレがヤバイ
659仕様書無しさん:03/03/22 04:22
>>655
真理値な。
660仕様書無しさん:03/03/22 04:28
わかったわかった。俺のために喧嘩するな
661仕様書無しさん:03/03/22 05:15
>>660 誰だ貴様
662仕様書無しさん:03/03/22 05:39
!!a == TRUE …って屁理屈を通してみる。
663662:03/03/22 05:42
なんかむりぽ。やっぱり却下。
664仕様書無しさん:03/03/22 06:05
!!a == !!TRUE
!!!!a == !!!!TRUE
なにがなんだか。
665仕様書無しさん:03/03/22 06:19
>>662-663 いけてるんじゃないか?
666662:03/03/22 06:22
TRUE が何かによるので >>664 のほうがいいような。
いずれにせよ TRUE/FALSE の一方が 0 と非0 である必要があるけど。
667sage:03/03/22 07:24
>646
basic でも、if a then とか、a = ( c < b ) とか書いてたな、俺。
もうかれこれ15年以上も前のことなんだが。
668仕様書無しさん:03/03/22 08:49
>>667 小学生の頃,雑誌か何かに if a<>0 を if a と書いた方がメモリ食わないとか速いとか
書いてあるのを見て,すげー,頭いー,と思ったことを思いだしました。昭和50年代前半だか
らだいたい同じ頃ですね。
669仕様書無しさん:03/03/22 09:08
未だに古いコンパイラに人間があわせている奴がいるのか?
670仕様書無しさん:03/03/22 09:19
C言語の場合ifって名前おかしいよね。
if_TRUE_or_not_ZERO_or_not_NULLってすべき。

if(a)foo() は日本語にすると もし0ならばfooを呼び出す になるのに
呼び出されないなんて、もうアフォかと。
671仕様書無しさん:03/03/22 09:21
>>669
 いまだに、「こっちの方がちょっと早くなるから」と言って
平気で可読性を落とす奴多いよな。

(少しは5年後、10年後にソース読む第3者のことも
考えてホシー)
672仕様書無しさん:03/03/22 09:23
昭和50年代前半なら25年ぐらい前だろ
673670:03/03/22 09:26
修正

× if(a)foo() は日本語にすると もし0ならばfooを呼び出す になるのに
○ aが0の場合、if(a)foo() は日本語にすると もし0ならばfooを呼び出す になるのに

もしくは

× if(a)foo() は日本語にすると もし0ならばfooを呼び出す になるのに
× 呼び出されないなんて、もうアフォかと。
○ if(a)foo() は日本語にすると もしaならばfooを呼び出す になるのに
○ aが0の場合、呼び出されないなんて、もうアフォかと。
674仕様書無しさん:03/03/22 09:28
なんか自分勝手な解釈をして勝手に文句つけてる奴がいるな。
675仕様書無しさん:03/03/22 09:38
古い人間はさっさと消えてね。
ifはJavaやC#のような実装が良いよ。
まぁ、後発が優れているのは当たり前だけどね。
676仕様書無しさん:03/03/22 09:44
>>673
> ○ aが0の場合、if(a)foo() は日本語にすると もし0ならばfooを呼び出す になるのに

するとaがboolean型で値がfalseの場合は、チミの解釈ではどうなるべきなのかね?
677670:03/03/22 09:59
>>676
はぁ? 不等号省略するなって言ってるだろ。
とか言うと不等号沢山書いちゃうお馬鹿さんがいるんだよな。
ANDやORで区切られた範囲内で一つだけね。

まぁifでboolしか使えない言語なら、ifをもし〜が真ならと訳して、
もしaが真ならと言っても良いが、bool以外も使えちゃう言語だと
もし1が真ならとか、もし非nullが真なら、とかになっちゃって
1は1で非nullは非nullに決まってるだろ、同一視するなゴラァ。となるな。
678仕様書無しさん:03/03/22 10:03
相当な電波だな。
679670:03/03/22 10:10
>>678
ゴミレス、煽り、負け惜しみ、捨て台詞。

どれがあなたのレスにふさわしいだろうか?
680仕様書無しさん:03/03/22 10:13
>>673
> ○ aが0の場合、if(a)foo() は日本語にすると もし0ならばfooを呼び出す になるのに

これはどう解釈してもif(a)foo()はif(a==a)foo()と解釈すべきだという主張だろ?

>>677は日本語にすらなっていない
681仕様書無しさん:03/03/22 10:14
>>679
>>678には、その程度の言葉では語り尽くせない奥の深さを感じる。
682仕様書無しさん:03/03/22 10:16
そうか、春休みだったな
683670:03/03/22 10:17
>>680
> これはどう解釈してもif(a)foo()はif(a==a)foo()と解釈すべきだという主張だろ?
どうしてそうなるのですか? それだと常に真になりますね。アフォですか?
684仕様書無しさん:03/03/22 10:18
>>682
>>679>>673>>682に置き換えてね。
685仕様書無しさん:03/03/22 10:20
>>683
>>673をよーく読んでみな?

aが0の場合、if(a)foo()はif(a==0)foo()になると主張してるわけだろ?
686670:03/03/22 10:23
>>685
> これはどう解釈してもif(a)foo()はif(a==a)foo()と解釈すべきだという主張だろ?
> aが0の場合、if(a)foo()はif(a==0)foo()になると主張してるわけだろ?
もう文章が破綻してますよ。起きてますか?
687仕様書無しさん:03/03/22 10:47
熾烈な電波だな。
688仕様書無しさん:03/03/22 11:22
>>670は神
689仕様書無しさん:03/03/22 11:31
おいみんな、勘違いしてないか?
>aが0の場合、if(a)foo() は日本語にすると もし0ならばfooを呼び出す になるのに
この文章で間違ってるのは"日本語にすると"の部分だけだろ。
>>670用の特殊な言語で書かれてるからお前らのような低能には理解できません。
690仕様書無しさん:03/03/22 11:38
最初のやつ↓が言いたかったのだろ。aなんて変数があるから勘違いするやつが出てくる

if(0)foo() は日本語にすると もし0ならばfooを呼び出す になるのに
691仕様書無しさん:03/03/22 14:08
Z80 しかやってない上で語るが、CPU命令(マシン語)には元々
0 (又は非0) かどうかを判断してジャンプする命令しか無いわけだから、
設計上は C の if の方が素直であるね。

BASICがどんな処理してるかは知らんが、余計な事してる感が否めない。
692仕様書無しさん:03/03/22 14:28
フラグレジスタの話など持ち出すのは筋違い。
693sage:03/03/22 15:00
>690
> if(0)foo() は日本語にすると もし0ならばfooを呼び出す になるのに

何が0なのかねえ。日本語は主語を省略できるんだけど何を省略したのかな?

>691
z, cフラグは1bitだからね。そりゃ当たり前っつえば当たり前。
basicだって余計なことも何もしていないでしょ。真の時、変数の全部のビットが1になるだけで。
694仕様書無しさん:03/03/22 16:00
お前ら間のレスが読めないのか?
> if(0)foo() は日本語にすると もし0ならばfooを呼び出す になるのに
>>673で修正されてるだろ。
695仕様書無しさん:03/03/22 16:03
まあ673の訳が間違っているわけだが。
696仕様書無しさん:03/03/22 16:04
>>694
あんた必死すぎてつまらんよ。
697694:03/03/22 16:04
あぁ、修正されてる文引用してしまった。
> if(a)foo() は日本語にすると もし0ならばfooを呼び出す になるのに
の間違い。

>>693
> 何が0なのかねえ。日本語は主語を省略できるんだけど何を省略したのかな?
主語は0だろ。抜けてるのは動詞か?
ほら見ろ不等号を省略するからそういうことになる。
698仕様書無しさん:03/03/22 16:11
>>692
> フラグレジスタの話など持ち出すのは筋違い。
禿げ同。実装レベルの話だな。
Javaのboolはintで実装されていても
言語上は1bitであるかのように扱われる。
>>697
(○○が) もし0ならば
700仕様書無しさん:03/03/22 16:13
>>697
不等号を省略せずに書くと、どうなるんですか?
>>699
(○○が) もしnumberならば(プ
702仕様書無しさん:03/03/22 16:20
>>697
主語は '式' だと思うけど。
式には不等号や等号が含まれていないと“ほらみろ”なのか?
703仕様書無しさん:03/03/22 17:04
>>700
当然 0!=0 か !(0==0) でしょ。

こういう場合、普通は FALSE って書くけどね。
数値を直接、単体で書くのはおかしすぎ。
704仕様書無しさん:03/03/22 17:05
>>703
> 数値を直接、単体で書くのはおかしすぎ。

この発想が変だな
705仕様書無しさん:03/03/22 17:09
C言語に毒されたジジイが根拠も言わずに反論しています(w
706仕様書無しさん:03/03/22 17:11
>>704
「おかしすぎ」の根拠は多分ないんだろうね。
707仕様書無しさん:03/03/22 17:12
歩行器がないと歩けない赤ちゃんの論理だな。
708仕様書無しさん:03/03/22 17:16
>>707
>歩行器がないと歩けない赤ちゃんの論理だな。

はじめてきいたです。それはどういうたとえですか?
教えてくらはい。
709仕様書無しさん:03/03/22 17:17
>>706
過去スレ読もうね(w
710仕様書無しさん:03/03/22 17:18
>>708
自分で考えろ
711仕様書無しさん:03/03/22 17:21
>>710 おうよ!









チッ…
712仕様書無しさん:03/03/22 17:25
694が上司だったら会社辞めたくなる。
部下だったら島流しにしたくなる。
713仕様書無しさん:03/03/22 17:27
このスレには >>697 はもういないのか?
燃料提供者として適任だと思うんだが。
714仕様書無しさん:03/03/22 17:35
>>707
くだらねぇ。例えってのは、常々無意味なものだよ。
例え方次第で180度感覚が変わってしまう。
所詮、例え=別物なんだから感覚が一致することは無い。

> 歩行器がないと歩けない赤ちゃんの論理だな。
命綱が無いと綱渡りも出来ない素人
安全装置が無いと宇宙にもいけない宇宙飛行士
715仕様書無しさん:03/03/22 17:35
よくもまぁ、特定の言語の書式だけについてだらだらと
話が続けられるなぁ、、、 COBOLしかやろうとしない
奴らはCOBOLerと蔑まれるが、こういう連中もCOBOLerと
さほど変わらないな。
716692:03/03/22 17:44
なんでこんなに荒れてるの?
717仕様書無しさん:03/03/22 18:00
>>716
春だからな。かあさん
718仕様書無しさん:03/03/22 18:02
なるほど春になると>>717のような奴が出てくるわけだ。
719632:03/03/22 18:18
>>637にも誰かコメントくれ。
720  :03/03/22 18:28
>>637
こんなもん、エディタで適当に置換すればよろしい。

当然、その作業時間も工数に含める。」

winなら、文字置き換えのツールはいろいろ在る。

まあ、オレなら無視して作業。「めいめい規則が複雑で分かりません」と馬鹿のフリしてさようなら。だな。
721仕様書無しさん:03/03/22 19:48
>>699
> (○○が) もし0ならば
日本語分かってないだろ。おまえ。
もし0ならば〜を実行する・・・わけないだろ。
722仕様書無しさん:03/03/22 20:01
>>721
レスの流れをよんでないなお前
723仕様書無しさん:03/03/22 20:03
>>722
春だからな。
こういった馬鹿は放置するに限るぞ。
724仕様書無しさん:03/03/22 20:06
「春だから」とうるさい厨はどうにかならんものか。
725仕様書無しさん:03/03/22 20:17
>>724
春だからしょうがないよ。
726仕様書無しさん:03/03/22 20:23
>>725
おまえも同類。ったく、こういう奴は一年中、
春だから、夏だから、秋だから、冬だから、って
言ってるし、その間には、まだ春じゃないだろとか
まだ春のがのこってるのかとか言ってるからな。ウゼー
727仕様書無しさん:03/03/22 20:30
>>726
> >>725
> おまえも同類。ったく、こういう奴は一年中、
> 春だから、夏だから、秋だから、冬だから、って
> 言ってるし、その間には、まだ春じゃないだろとか
> まだ春のがのこってるのかとか言ってるからな。ウゼー

うわあ・・・可哀相に・・・
728仕様書無しさん:03/03/22 20:45
>>639についても誰かコメントクレ.
729仕様書無しさん:03/03/22 20:56
>>727
つまらん煽りだなぁ。低レベルと言えば良いのか?(苦笑
730仕様書無しさん:03/03/22 21:01
>>729
必死だなあ。
731仕様書無しさん:03/03/22 21:04
>>722=>>724=>>726=>>729
知障はカエレ!!
732仕様書無しさん:03/03/22 21:13
はい!
みなさん、深呼吸してくださぁ〜い。
733仕様書無しさん:03/03/22 21:20
なんかネチネチしてますね。
734仕様書無しさん:03/03/22 21:38
春だからな・・・・
735仕様書無しさん:03/03/22 21:40
納豆はやりの今日この頃、

ここはネバネバなインターネットですね。
736仕様書無しさん:03/03/22 21:43
>>730-735
てめーらまとめて氏ね!!
737仕様書無しさん:03/03/22 21:57
>>736
今、流行りの集団自○ですか?

ここは殺伐としたインターネットですね。
738仕様書無しさん:03/03/22 23:37
集団自慰か・・・
たしかに殺伐としてるな・・・
739仕様書無しさん:03/03/22 23:40
流行ってるのかよ(w >集団自慰
740仕様書無しさん:03/03/22 23:42
SEって、集団自慰だよね。”オレって最先端”みたいな。

バーカ。自慰は”ZE”だろ。
741仕様書無しさん:03/03/22 23:55
うほ、めずらしくスレが伸びてると思ったら
アホのせいで荒れてるだけだぜ…
742仕様書無しさん:03/03/23 00:24
>>741
荒れてるんじゃなくて盛り上がってるんですよ
743仕様書無しさん:03/03/23 00:31
>>742
そ  う  で  す  ね  !
744仕様書無しさん:03/03/23 11:12
おいお前らが2chなんかで油を売ってるうちに
>>670はビジネスジャンプを読破し終えてますよ?
745仕様書無しさん:03/03/23 11:40
>>639についても誰かコメントクレ
746仕様書無しさん:03/03/23 11:56
>745
>>639は説明が下手か、急いでいたんだな。
747仕様書無しさん:03/03/23 13:10
つまらん・・・
748仕様書無しさん:03/03/23 13:26
>>747
以下>>730に戻る。
749仕様書無しさん:03/03/23 13:38
こんなに荒れてる会社、辞めたい。
750仕様書無しさん:03/03/23 14:32
−−悲しいとき−−



・5000行のソースファイルに
 グローバル変数が20個も使われているのに気がついたとき



・forループの終わりが、
 いくらスクロールしても
 わからないとき



・Switch Caseが孫入れ子されているとき



・forやwhileループ中のbreak文のところに
  /* 次の処理へ抜ける */
 というコメントがあるのを見たとき


751おれもだけど:03/03/23 15:05
>>750
−−悲しいとき−−













行間空けすぎじゃハケェ
752仕様書無しさん:03/03/23 16:09
−−悲しき時−−

if文の果てなき入れ子を発見せし時。

我脳内スタックオーバーフローせり。
753仕様書無しさん:03/03/23 16:26
−−悲しい時−−

アプリケーションエラーとともにエディタが終了したとき。

今日は定時に帰りたかったのにー
754仕様書無しさん:03/03/23 16:34
>>750
20個か‥‥‥‥‥‥


わりと少ないな。
755仕様書無しさん:03/03/23 17:19
>>754
だけどforループのカウンタに使うのがグローバルで、その値を
他の関数でも参照しながら処理してたりすると割と悲しくなると思うけど。。。
756仕様書無しさん:03/03/23 18:17
― ― 悲しき時 ― ―

ソースコードに Programed by Takeshi

と書かれてたのを見つけた瞬間
757仕様書無しさん:03/03/23 18:56
>>750
そんなのCOBOLだったらふつうだよ。
20年くらい前のソースなんかとても見れたもんじゃないよ。
l万行以上のソースでgotoしまくりで、グローバル変数
を複数の目的で共用してたりする。
変数名も意味のある名前が付いていればいいけど、
先頭から○○1、○○2、ってな具合に連番がついているだけ
ってのもあるぞ。これを解析して新しいプログラムに移植しろと
言われた日には・・・
758仕様書無しさん:03/03/23 19:34
#define NULL ぬるぽ
759仕様書無しさん:03/03/23 19:44
#define ぬるぽ NULL
だろ?
とネタにマジレ(略
760仕様書無しさん:03/03/23 21:13
>>757
COBOLじゃないから普通じゃないんだろ。
COBOLだったら糞コードしかできないのは当たり前。不幸自慢はやめたまへ。
761仕様書無しさん:03/03/23 22:22
>>760
>COBOLだったら糞コードしかできないのは当たり前。
(゚Д゚)ハァ?
762仕様書無しさん:03/03/23 22:25
>>761 …釣られんなって
763仕様書無しさん:03/03/23 23:22
>757
まず仕様書を要求してみれ。
無ければ堂々と断れるなー。

仕様書があったら現状と合っているか確認してみれ。
たいてい合ってないので断れる。

断れないときは解析期間をどかーんと取っとかないと怖いぞ。
764仕様書無しさん:03/03/25 18:22
えーっとぉ、
グローバル変数が20個使われてぇ
型は全部Variantでぇ
同一プロシージャの中だけでも途中で使用目的が変わっててぇ
別プロシージャでは当然全然違う意味で使われててぇ
それからそれから・・・
765仕様書無しさん:03/03/25 18:29
aaa.basにて
 Dim i as Variant
 Variant型・・・いやな予感・・・Dimで宣言しとるし。


bbb.frmのSub CCC前半にて
 For i = 0 To
 おいおいループカウンタにグローバル変数使用かよおめでてーな


中盤にて
 i = rc.Eof
 ん?


後半にて
 i = rc("社員コード")
 待てやゴルァー!!
766仕様書無しさん:03/03/25 20:59
VB は触ったことないのでサッパリだが、
何やらスゴイことになってるのだけは理解できるな。
767仕様書無しさん:03/03/25 22:04
>>766
バリアントの型って、なんでもありの変数なのさ
数値でも文字列でもその場の思いつきで代入してもエラーにならない
メモリ余計に食うわ、遅くなるわ、他人が見たら意図がわかりずらくなりやすいわで
これを無意味に使用してる人は動けばいい程度の考えて組んでいるんでしょう

漏れも、今担当してるものを引き継いでもらった時にバリアント多様でかなり面くらいますた
1年以上かかって全て用途に応じた型に直したよ


ところで.NETにもこの型あるの?
768767:03/03/25 22:05
引き継いでもらった当時のソース残してあるから、ネタ探しついでに今度見てみるかな
769仕様書無しさん:03/03/25 22:08
ちとスレ違いになるかと思うんだけど、
バリアントはどういうときに使うとよろしいのでせう?
存在する意味がわからんのだが。
770仕様書無しさん:03/03/25 22:09
C の void* みたいなモンかなぁ?
771仕様書無しさん:03/03/25 22:32
>>764
>グローバル変数が20個使われてぇ

VBでグローバル変数20個が何故辞めたくなる原因になるのか
グローバル変数300個とか普通だぞ。


おっと、DQNなPGなら、が抜けていた。
772仕様書無しさん:03/03/25 22:33
>>769
特殊な可変長配列とか
773仕様書無しさん:03/03/25 23:18
>771
グローバルが全部Variantっつーことがきびしーと思う。
774仕様書無しさん:03/03/25 23:19
>>771
×: DQNなPGなら
○: 普通のVBスライムなら
775仕様書無しさん:03/03/25 23:20
dim a,b,c,d,e,f as integer
とかも、落とし穴だわな
776仕様書無しさん:03/03/26 00:15
VB6からは、その記述は全部Integerになったのでわ
777766:03/03/26 00:31
再び VB 知らずの >>766 です。

>>775
 int a, b, c, d, e, f;
と意味が違う……みたいだな(;´Д`)いったいどうなってんだよ
778仕様書無しさん:03/03/26 00:33
a, b, c, d, eはVariant型
fのみInteger型
でもランタイムに対しては意思表示になってないが,
人間にはある程度意思表示になってるのでちょいましという罠
彡 <ならないのでわ
780仕様書無しさん:03/03/26 00:47
押菌>unko!
達悪>unko!
押菌>FAQ U
達悪>U 大!
押菌>∫Ηinё!
達悪>κΙ┗┗ U!
押菌>μηκο!
達悪>μηκο!
781766:03/03/26 01:06
>>778
そうなのか…。全部 integer にしたい時は
 dim a as integer;
 dim b as integer;
 ....
になるのかな。dim と as があるせいか、ケッタイに感じるな。
782仕様書無しさん:03/03/26 01:12
dim a as integer, b as integer, ...
でよかったんでは? しばらくVB触ってないんでうろおぼえ。
783仕様書無しさん:03/03/26 01:50
ひょっとしてこの位は序の口でつか?

void func(boolean b){
if( b == true || b == false ){
...
}else{
...
}
}

常駐先で見た内のプログラムのひとつ、ってか
ほんとーにあなたプロですかと。
784仕様書無しさん:03/03/26 02:21
つーかただのバグのような。
785仕様書無しさん:03/03/26 05:57
バグがあるのはそのコードを書いた香具師の脳だが。
786仕様書無しさん:03/03/26 05:59
つーか、3値論理じゃねーの?
787仕様書無しさん:03/03/26 07:12
boolean が 3 値を取るとはつつつみだが・・・
788仕様書無しさん:03/03/26 08:20
>>786
boolean 型が 3 値を取ってるんじゃねーの、このプログラムでは。
789仕様書無しさん:03/03/26 08:34
void function(boolean b){
if(b == true || b == false){
...
}else{
puts("優柔不断なbさんは嫌い。");
}
}
ってことか。
790776:03/03/26 10:02
すまん、>>775

dim a as integer, b, c, d, e, f

で全部Integerになるんだつた
791仕様書無しさん:03/03/26 10:03
( ゚д゚)
792仕様書無しさん:03/03/26 10:12
>>790
そんなの八田( ´Д⊂
793仕様書無しさん:03/03/26 11:09
そういうセコい(?)書き方しなけりゃいいんだよな?
794仕様書無しさん:03/03/26 11:53
VC++なら、こんなのがありうる。
BOOL b;
// :
// :
if( b == TRUE || b == FALSE ) {
    // :
} else {
    throw logic_err();
}

>>783
きっと、そのコード書く前日までVC++やってたんだよ。
795仕様書無しさん:03/03/26 12:07
>>794
VCじゃなくても、Windowsプログラマなら、かな。
796仕様書無しさん:03/03/26 12:41
改造依頼受けて関連ソース見てたらfreeしてるめもりに
こんなシステムがすでに都道府県の役所で動いてんだから不思議だ
次にソースコンパイルしたら運がよければアプリエラーw
ptbl=NULL;
ptbl=calloc(1,sizeof(TBL));
:
:
if(ptbl_g_ymd!=NULL)
{
free(ptbl_g_ymd);
}
if(g_flg==0)
{
if(ptbl->m_iFlg == 1)
{
strcpy(ptbl->szKai,"改");
}
:
:
797仕様書無しさん:03/03/26 12:45
日本語しゃべれ
798仕様書無しさん:03/03/26 16:40
>>783
有名なジョーク。
#define QUESTION(bb) ((bb)||!(bb)) /* hamlet, shakespeare */
799仕様書無しさん:03/03/26 17:48
そっか、bbはtwo bなのか。
800仕様書無しさん:03/03/26 18:44
>>799
!!
801仕様書無しさん:03/03/26 22:16
よそから移管されてきたシステムのソース (抜粋)

if( con == null ){
send( "[email protected]" , "Error" , "xxさん!出社です。xxxxのDBに接続できません。"+m );
}

アフォ
もうだめぽ
802仕様書無しさん:03/03/26 22:25
>>801
PHP なら $con === null だろう…。
いずれにしても嫌なコードだ…(;´Д`)
803仕様書無しさん:03/03/27 05:02
PHPにもいろいろあるからな。
804仕様書無しさん:03/03/27 06:33
>>803
産みの母と育ての母が違うとか、実家の父が倒れて家業の温泉宿継がなきゃならなくなったり?
805仕様書無しさん:03/03/27 07:11
xxさんにもいろいろあるんだな。
806仕様書無しさん:03/03/27 08:38
>803
PHSは昔、PHPだったな。Personal Handy Phon。
807仕様書無しさん:03/03/27 08:59
Phon
808仕様書無しさん:03/03/27 10:23
イーじゃないか
809仕様書無しさん:03/03/27 23:51
今日の出来事、
ifとforのネストが20ぐらいの関数を見つけ、卒倒しそうになった。
最後の方なんて}}}}}}}}}}}}}}}}}}}が1行に記述されてた。

初めてこんな悲惨なソースみたよ・・・
このスレに書いてあることって皆マジなのか?
810仕様書無しさん:03/03/27 23:52
>>809
Lispみたいだな
811仕様書無しさん:03/03/28 09:03
((((((;゚Д゚))))))
812仕様書無しさん:03/03/28 09:37
>>811
Lispみたいだな
813仕様書無しさん:03/03/28 12:37
VBやCにもスーパーカッコがホスイと思ったことはある。
814801:03/03/28 16:58
>>809
抜粋したけど、抜粋してない部分は同じような感じですた
サスガに閉じカッコは1行じゃなかったけど。
場当たり的 if の嵐で漏れも卒倒しかけたよ
815仕様書無しさん:03/03/28 23:14
>>806
Presonal Handyphone System.
816仕様書無しさん:03/03/28 23:20
if文のthenとelseでは短い方を先に来るようにするほうが
elseを長々と探さずにすむ。たとえthenが空文になろうとも

817仕様書無しさん:03/03/28 23:35
>>816
ネタだよな?
818仕様書無しさん:03/03/28 23:38
俺は例外っぽい処理を先にやる派。<816
819仕様書無しさん:03/03/28 23:45
俺は、入る可能性の高い方を先にやる派。<816
820仕様書無しさん:03/03/28 23:46
>>818
ifの例外がelseな訳だが・・・
821仕様書無しさん:03/03/29 00:40
おれは逆アセして効率の良い方にする派。
822仕様書無しさん:03/03/29 00:45
>>820
( ´д)ヒソ(´д`)ヒソ(д` )
823仕様書無しさん:03/03/29 00:46
気分で決める派
824仕様書無しさん:03/03/29 01:01
神によって決定される派
825仕様書無しさん:03/03/29 01:17
elseを使わない派

if (expression) {
 /****/
}
if (!expression) {
 /****/
}
826仕様書無しさん:03/03/29 01:28
ifも使わない派

void (*func[2])() = { &no, &yes };
func[expression && 1](args...);
827仕様書無しさん:03/03/29 02:31
expression || hoge();
expression && lala();
828仕様書無しさん:03/03/29 02:32
仕事放棄する派
829仕様書無しさん:03/03/29 03:35
正論理(true)を先に持ってくる派
830仕様書無しさん:03/03/29 05:02
そういえば小渕さん今頃どうしてるだろう派
831仕様書無しさん:03/03/29 05:04
むしろ村山氏とかまだ生きてるんだろうか派
832仕様書無しさん:03/03/29 06:30
印象派の俺が最強。
833仕様書無しさん:03/03/29 06:33
運任せ派。

if (rand() % 2) {
  ....;
} else {
  ....;
}
834仕様書無しさん:03/03/29 06:37
ぬるぽ派
835仕様書無しさん:03/03/29 06:59
switch派
836仕様書無しさん:03/03/29 07:23
goto派
if (!expr) goto done;
〜〜
done:
837仕様書無しさん:03/03/29 09:11
if使ってんじゃねーか!
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/ ←>>836
 (_フ彡        /
838仕様書無しさん:03/03/29 09:41
新思潮派
839仕様書無しさん:03/03/29 10:06
うんこしない派
840仕様書無しさん:03/03/29 10:11
美人だけはうんこしない派
841仕様書無しさん:03/03/29 10:30
美人のうんこを覗いてみたい派
842仕様書無しさん:03/03/29 10:48
美人のうんこなら食えるんじゃないかなと思ってる派
843仕様書無しさん:03/03/29 10:54
かめはめ派
844仕様書無しさん:03/03/29 11:32
工房時代、こういうことする香具師がいました。

if(a == b){
if(a == b && c == d){
〜〜;
}

}
845仕様書無しさん:03/03/29 11:39
>>844
用心深い人なんでしょう(真顔
846仕様書無しさん:03/03/29 13:27
思っていたより良く燃える燃料の 816
847仕様書無しさん:03/03/29 14:17
実はaもbもグローバルで、他のスレッドから
書き換えられたりしたりなんかして
848仕様書無しさん:03/03/29 15:23
同期オブジェクト使うし第一アトミックじゃないし
849816:03/03/29 18:37
>>846
こんなに萌^H燃えるとは思わなかったyo
850仕様書無しさん:03/03/29 18:52
>>849
stty erase ^H
しとけ
851仕様書無しさん:03/03/29 18:59
>>849
ワラタ
852仕様書無しさん:03/03/30 15:44
こんな順次処理見たよ。泣きそう
rtn = 関数_Begintransaction()
rtn = 関数_Execute()
rtn = 関数_Commit()
だからrtnは何なのか?と小一時間。
rtnをツカエヨー!!
853仕様書無しさん:03/03/30 15:57
>>852
きっとoperator=でものすごい働きを・・・
854仕様書無しさん:03/03/30 17:05
そういえばどっか(2ch)で、こんなソース観たな
class Exp {
    int v,o;
public:
    Exp( a ) { o = a; }
    operator=( int a ) {
        if( ( v = a ) != o )
            throw exception();
}
};

void foo() {
Exp rtn(0);
rtn = func1();
rtn = func2();
}

とりあえず、雰囲気こんな感じ。
855仕様書無しさん:03/03/30 17:12
ファンタジー派
856仕様書無しさん:03/03/30 17:20
FF派
857仕様書無しさん:03/03/30 17:30
http://www.pink-angel.jp/betu/linkvp2/linkvp.html
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
★みんなの情報局★みんなのリンク集★ココ最高★
858仕様書無しさん:03/03/30 17:41
>856
タケーシ ハケーン!!
859仕様書無しさん:03/03/30 18:57
FF と聞くたびにタケーシを思い出してしまうのだが・・・
860仕様書無しさん:03/03/30 21:50
>>852
VBからきた香具師じゃないの?
VBだと関数のように()をつけて呼び出すときは返り値を代入するか
Callを使うかのどちらかにしなければならないから、
そういうコード見たことあるよ。
861仕様書無しさん:03/03/30 21:51
>>860
こういうことね。

rtn = 関数_Execute() ... ok
Call 関数_Execute() ... ok
関数_Execute ... ok
関数_Execute() ... エラー
862仕様書無しさん:03/03/30 21:58
>>852
デバッグ用とか?
ステップ実行で結果だけを見るのに便利だとか・・・・
オブジェクト返す関数なら、気持ちはわからんでもない。
863仕様書無しさん:03/03/30 22:27
>>862
禿堂

デバッグ用に組み込んである処理を後から見て
「カッコワルイ」とか「ダメコード」という奴多いよなあ
864854:03/03/30 22:27
>>854の可能性はスルーか?
うゎぁぁぁん
865仕様書無しさん:03/03/30 22:37
>>864
あぁ、ごめん。
可読性云々の前に、何がやりたいのかわからんかった。
866854:03/03/30 23:34
>>865
>>852に置ける、rtnってのは、
「コンストラクタで設定した以外の値を代入すると、例外を投げるクラス」
の、インスタンスなんじゃなかろうか。

ってことでつ。





分かりにくい発言でした。
ちゅらさんが終わり次第逝ってきます。
867仕様書無しさん:03/03/30 23:39
えりぃカワイイ
868仕様書無しさん:03/03/31 00:05
えりぃの尻ちっちゃくてキュッとなっててえぇ形やなぁ
869仕様書無しさん:03/03/31 12:22
>864
可読性をスルーしますた。
870仕様書無しさん:03/03/31 22:31
>>852
失敗しても
次に逝っちゃうのはマズイ(処理は全部オッケーみたいな)
ってことかと・・・
871仕様書無しさん:03/04/01 09:26
>>870
意味がさっぱりわからん。
860 が正解だろ。
872仕様書無しさん:03/04/01 12:00
>>871
意味判るよ。
860は間違いじゃないけど、852が嘆いているのはトランザクションするならしっかりやれ..と言う事じゃないの?
873仕様書無しさん:03/04/02 00:17
lint対策じゃないかと思ってみた。
(void)printf ("The world!");
みたいに。
874仕様書無しさん:03/04/02 18:50
ならもとから void 返すようにすればいいじゃん。
875仕様書無しさん:03/04/02 20:58
どっかから購入したlibという可能性も。
876仕様書無しさん:03/04/02 21:38
関数_??? などという名前を使った lib など要らん。
877仕様書無しさん:03/04/02 23:33
>>876
まさか!?いや、もしかして。
878仕様書無しさん:03/04/03 11:11
>>877
いや、たぶんそうだろう。
VBとかだと日本語が使えるしな。
879仕様書無しさん:03/04/03 13:04
>>876
お客様!
手続_??? などという名前を使った lib はいかがでしょう。
880仕様書無しさん:03/04/03 16:50
提供されたライブラリ内の関数名が
A001_FUNC2_001
A001_FUNC2_002
A002_FUNC28_001
などのIDだったことがあるよ。
一緒に、IDごとの機能を書いたリストをもらった。

881仕様書無しさん:03/04/03 21:02
C++なはずなのに
・goto文使いまくり
・例外処理無し
・ほとんどの変数が1文字
・コメント文&ドキュメント限りなくゼロ
882仕様書無しさん:03/04/03 21:05
>>881
富○通のプログラム
883仕様書無しさん:03/04/03 22:18
>881

んむう。<stdexcept>連中は投げるとき必ず文字列が要るから面倒だし重そうだし、
関数内でけりが付く程度のエラー処理はgotoでやっつけちまったりもしますが……
まぁ、漏れがtry-catchをまだ巧く使えてないってのも理由ではありまつ。
884881:03/04/03 22:41
例外処理どころか、ほとんどエラー処理がなかった。鬱だ
ようやく、goto文を追い出した。
てか、普通にwhileとかbreakとかcontinueとかでできるじゃん!
885C++使い:03/04/03 22:47
>>881
・gotoはまったく使わん
・例外処理もまったく使わん(独自のエラー処理の方が明快だから
・変数名(関数名)は長いものだと32byte超える(w
886仕様書無しさん:03/04/03 22:57
>>884
ぜ ん ぶ デ ス マ が わ る い ん で す 。
887仕様書無しさん:03/04/03 23:26
>885

良ければ後学のため、「独自のエラー処理」の詳細キボンヌ。
888仕様書無しさん:03/04/03 23:47
885 = M$社員
独自のエラー処理 = 構造化例外処理
889C++使い:03/04/03 23:48
>>887
私独自のものだから他の人には抵抗があると思う

まぁ一応晒す・・・エラー発生しそうな箇所(例外でいえばthrowするところ)に
独自のエラー関数入れてるだけ

if(ptr == NULL)
ErrorM(); // ErrorはErrorFnc(__FILE__, __LINE__, m_hWnd)のマクロで
       // ErrorFunc関数でエラー発生したファイルと行をMessageBoxで表示する

みたいな感じに・・・
素直に例外使えと言われそうだけど・・・これでずっとやってきたしね
それと try{} でながながとコードをくくるのに抵抗があるのよ


でもよく考えたらここ個人ではなく会社でのプログラムコードの話だった
鬱だし脳・・・
890仕様書無しさん:03/04/04 10:22
>>889
> try{} でながながとコードをくくるのに抵抗があるのよ
俺も例外処理自体はif文でエラーチェックよりはましだとおもうのだが、
try{}で1インデントを消費してしまうのはいかがなものかと思う。
だがVBみたいなのもいやだ。

こんな俺ってワガママですか?
891仕様書無しさん:03/04/04 10:40
>>889
・・・・・C++歴どれぐらい?
いや、それよりももしかして派遣系であちこちを渡り歩くタイプではなくて
自社にこもったまま外に出ないで何年も、ってタイプ?

めちゃくちゃ”どこにでもある”タイプなんでつが。
それを「独自の」と言っているのって、結構痛いよ
892ヽ(´ー`)ノ:03/04/04 10:58
#include <cassert> して ::assert(ptr != NULL) しようよ。
それかログ吐くか。
893仕様書無しさん:03/04/04 11:47
>891
独自のって、そういう意味じゃないだろ・・・
894仕様書無しさん:03/04/04 12:02
>>893
「独自」の意味を「オリジナル」ではなく「標準に用意されていない」って解釈したんだよね?
一瞬納得したが、やっぱり違うと思うぞ。

>>889 を見ろ。
>私独自のものだから『他の人には抵抗があると思う』
ただ単に世間を知らないだけかと思われ。
895仕様書無しさん:03/04/04 12:06
どくじ 1 0 【独自】

(名・形動)[文]ナリ
(1)自分ひとり。単独。
「―に発見する」
(2)他と異なり、そのものだけに見られる・こと(さま)。
「―な考えを展開する」「―な立場」
(3)独りよがりな様(さま)。自分だけの世界での語る事。
「―の意見を言う」「―な思想」
896仕様書無しさん:03/04/04 12:08
ホントだ。
でもまあ、同レス内で個人のプログラムって書いてあるし。
趣味の日曜プログラマならそんな世間なんて知らなくてもおかしくない・・・かな?

むしろ、その方が書籍やネット、オープンソース等で勉強するだろうし、
社内の馬鹿げた通例がない分一般的なコードになりそうな気もするんだけどなあ。
897仕様書無しさん:03/04/04 12:54
>>895
一体どこの辞書で調べたのか。
漏れが調べた限りでは、3は存在しないぞ
898仕様書無しさん:03/04/04 13:11
(4)ぬるぽ。NullPointerException。
「―ぬるぽ」「―ガッ」
899仕様書無しさん:03/04/04 13:13
>>890
> だがVBみたいなのもいやだ。

Try
 〜
  Throw New HogeHogeException
 〜
Catch ex As FooException
 エラー処理
Catch ex As BarException
 エラー処理
Catch ex As HogeHogeException
 エラー処理
Finally
 〜
End Try

こんなの?
900仕様書無しさん:03/04/04 13:23
>>899
On Error GoTo ... の話だと思うぞ。
901仕様書無しさん:03/04/04 22:49

VBの定番は関数・サブルーチンの先頭には必ず

ON ERROR RESUME NEXT

を入れる、という凶悪なコード。
902仕様書無しさん:03/04/04 23:56
>>901
うひは!!
903仕様書無しさん:03/04/05 01:23
(σ・∀・)σ gets(buf);
904仕様書無しさん:03/04/05 01:24
>>880
貴様!目立の手先か?
905仕様書無しさん:03/04/05 01:33
//*G
//*L PROGRAM-ID PROG01
//*L PROGRAMMER XXXXX
//*G***********************
//*G int main
//*G 用途: エントリポイント
//*G***********************
//*G エントリポイントの開始
int main( int RRC, char *SYSIN[] )
{
  //*L 開始メッセージの表示
  printf( "PROG01 STARTED\n" );
  ・・・・・・

コメントは「//*」
プログラムの先頭に「PROGRAM-ID」と「PROGRAMMER 」
大見出しには「//*G」(グループの事らしい)
小見出しには「//*L」(ラインのことらしい)
main関数の引数は必ず「 int RRC, char *SYSIN[] 」
これ守らないと怒られる
906仕様書無しさん:03/04/05 01:39
(σ・∀・)σ gets(buf);

>>905
ツッコミどころ違うけど
予約語以外は全て大文字ですか?
907905:03/04/05 01:44
>>906
YES!
大文字にしないと「変数と関数の区別が付かない」とかで怒られる。
でもユーザの関数は
int KEISAN_PROC(int ARG)みたいに大文字で宣言しなきゃいけない
凄く理不尽
908仕様書無しさん:03/04/05 01:44
>>905
うわぁ…この規約考えた香具師、絶対コボラーだな(w
909仕様書無しさん:03/04/05 01:48
>905

とりあえず手持ちの本から抜粋

>実際には、これら(引用注:mainの引数)の名前は何でもよいのです。しかし、
>プログラムの99.9%で、argcとargvが使用されています。残りの0.1%の
>場合、これらの引数を目にしたプログラマは、悪態をつき、名前を
>argcとargvに書き換えます。
(「C実践プログラミング」オライリー・ジャパン P205 注2 より)

0.1%だそうだが……どうするよ?(w

# あと、javaだったらやっぱりpublic void main(String SYSIN[])なんだろーか
# で、まずとっぱじめに「int RRC = SYSIN.length;」
910仕様書無しさん:03/04/05 02:37
書き変わってない…
911仕様書無しさん:03/04/05 03:51
>>901
よくある話。
912仕様書無しさん:03/04/05 04:25
茅ヶ崎ちゃんねる
http://jbbs.shitaraba.com/travel/1213/
913仕様書無しさん:03/04/05 04:42
>>908
だろうね・・・
914仕様書無しさん:03/04/05 12:04
>905
あれじゃないか、JavaDocみたいな、コメントからドキュメントを自動生成するみたいなのがあるんじゃないかな。
915仕様書無しさん:03/04/05 12:13
>905 * から ぷーん とコボルの匂いがしますな
916仕様書無しさん:03/04/05 14:48
>>914
PROGRAM-IDとかはそうかもだけど、

int main( int RRC, char *SYSIN[] )

はそういう話では説明できないでしょ
917仕様書無しさん:03/04/05 16:11
RRCはわからんが
SYSINは汎用機でのstdinみたいな意味合いがあるから
やっぱCOBOLerの作った規約だろうな。
918仕様書無しさん:03/04/05 21:03
>>892
::assertって、ダメだろ。
919仕様書無しさん:03/04/05 21:48
>>905 って何だか論理的でスタイリッシュで
かっこいいですよね。


 んで、言語は何? これ。

もしかしてこれが伝説言語のコボルですか?
920仕様書無しさん:03/04/05 23:58
>>919
  ∩_∩
  (*゚ー゚)
  ノ  |
〜(_,,UU
921pupe:03/04/06 00:05
>大文字にしないと「変数と関数の区別が付かない」

これマジで言ってんの?ギャグかと思ったよ。
ふつー(がついていれば関数で、なければ変数って
暗黙のうちにわかるよな。
922pupe:03/04/06 00:09
>論理的でスタイリッシュ

うっそーん。1960年代の香りがぷんぷん。
ひょっとしてキミはオースティンパワーズ
を見てもスタイリッシュだと思う人?
923仕様書無しさん:03/04/06 00:09
>921

きっとまだ配列添字参照が[ ]だってこと覚えてないんだよ……
BASICもCOBOLも添字参照は( )だし (COBOLは配列とは言わんか)
924仕様書無しさん:03/04/06 00:14
最近ネタをネタで返すのが流行ってるの?良く見かけるんだが。
あ、「ネタニマジレス(・∀・)カコワルイ」を釣るためなのか。。
925仕様書無しさん:03/04/06 00:35
こないだ後輩が焦げ付かせたプロジェクトのフォローに入ったときのこと。
DB仕様を見てびっくり。数値も日付も全部 varchar。

こんなDB設計をした後輩がDQNなのか、
こんな後輩に 1プロジェクト任せる会社がDQNなのか。
926仕様書無しさん:03/04/06 01:00
>>925
寒すぎるな・・・
要約する時は全てプログラム側で処理するのだろうか?((( ;゚Д゚)))ガクガクブルブル
927仕様書無しさん:03/04/06 01:02
あ、毎度varchar=>別の型の変換すればDB側で要約できるな。(でもそんなことやってなさそう)
928仕様書無しさん:03/04/06 01:08
CSVから取り込むユーティリティがvarcharにしか対応してなかったとか
929仕様書無しさん:03/04/06 19:08
#include <studio.h>
930仕様書無しさん:03/04/06 21:20
#include <monosugoku.h>
931仕様書無しさん:03/04/06 21:37
#incldue <ctypo.h>
932仕様書無しさん:03/04/06 21:45
#insert <tinco.h>
933仕様書無しさん:03/04/06 21:51
#ifdef TINCO_INSERTED
934仕様書無しさん:03/04/06 21:58
>>931 チョットワロタ
935仕様書無しさん:03/04/06 22:11
//>>931 チョットワロタ
936仕様書無しさん:03/04/06 22:12
>>931
ちゃんとincludeがtypoになってる
>>931
/*
  ∧_∧
 ( ´∀`)< cたいぽ
*/
938仕様書無しさん:03/04/06 22:20
タイポがしたいポ。
939仕様書無しさん:03/04/06 23:28
タイーポ
940仕様書無しさん:03/04/06 23:38
タイポしちゃうゾ
941仕様書無しさん:03/04/06 23:46
タイ━━━━||Φ|(|´|Д|`|)|Φ||━━━━ホ!!
942間違えた:03/04/06 23:46
タイ━━━━||Φ|(|´|Д|`|)|Φ||━━━━ポ!!
943仕様書無しさん:03/04/07 00:15
ヌル━━━━||Φ|(|´|Д|`|)|Φ||━━━━ポ!!
944仕様書無しさん:03/04/07 00:20
// 混浴露天風呂を見てびっくり。右も左も全部varchan。
945仕様書無しさん:03/04/07 00:22
               ファサァ
       ∧_∧
       ( ・∀・)       ))
       /つ( ̄`ヽO_ノ⌒ヽ
      ノ   )        \ ))
     (__丿\ヽ ::    ノ:::: )
         丿        ,:'  ))
       (( (___,,.;:-−''"´``'‐' ←943


  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >_ノ⌒⌒⌒`〜、_
  _/し' //. V//⌒   ノ  ヽ) ←943
 (_フ彡     ニニニニニニニニ
946仕様書無しさん:03/04/07 04:19
>>905
とても汎用機用っぽいんですけど。
947仕様書無しさん:03/04/07 10:21
>>901
On Error Gotoが書いてあって
エラー処理でOn Error Resume NextとかOn Error Gotoが書いてあったなんてコードを食らったことがあるなぁ。
ついでにOn Error Gotoの行き先のラベルの前にExit (Sub|Function)が無いし。
しかも、エラー処理で盛大にエラーを発生させて落ちてるし。
948仕様書無しさん:03/04/07 10:41
>947
そもそも稼動してたのか?
949947:03/04/07 10:53
>>948
当然してない。
まだデスマーチが続いていると思われる…

On Error Gotoの行き先のラベルの真下にEnd Subがあるなんてのもあったしなぁ…
950仕様書無しさん:03/04/07 20:30
とりあえず、950を踏んでみる。

次スレは16進で行くべきかね?
951仕様書無しさん:03/04/07 22:52
いっそ256進で":"はどうよ、と提案してみる
952仕様書無しさん:03/04/08 00:04
>>951
0x7fになったらどうするんだ。
953仕様書無しさん:03/04/08 19:02
>951
それは末尾が「!」のスレでやるべきだろう。(半角スペースでも可)
954仕様書無しさん:03/04/09 02:09
#include "include\include.h"
955仕様書無しさん:03/04/09 19:28
...ド#9
ド#(嬰ハ)だから次はレ、だな。
956仕様書無しさん:03/04/09 21:50
人生にGotoとかreturn使ったら?
957仕様書無しさん:03/04/09 22:46
>>956
漏れの人生はcontinueばかりだ。
あがいてあがいて、振り出しに戻る・・・
958仕様書無しさん:03/04/09 23:13
Fortranだとcontinueは…
959仕様書無しさん:03/04/09 23:18
next
960仕様書無しさん:03/04/10 06:25
>>957
スマートに振り出しに戻れるのはいいことだお。
。・゚・(ノД`)・゚・。ウエエェェン

961仕様書無しさん:03/04/10 08:19
もし、contine使えたらどうするかなぁ…
PGなんて、やってないかも…
962仕様書無しさん:03/04/10 08:44
俺の人生、メンバがPrivateばっかりです。
たまには他のクラスと連携したいです。
963仕様書無しさん:03/04/10 08:54
僕のメソッドは、実装されてるけど、使われたことがありません。
964仕様書無しさん:03/04/10 09:04
祝 多重継承ヽ(´ー`)ノ
965仕様書無しさん:03/04/10 09:33
>>964
いいなあ
966仕様書無しさん:03/04/10 10:29
呪 多重軽傷
967仕様書無しさん:03/04/10 10:54
デッドロック
968仕様書無しさん:03/04/10 12:13
漏れの人生、(void*)0;
969仕様書無しさん:03/04/10 12:44
俺の人生、ぬる・・・・・・・・・・・・・・・・・・・・おっとっと。
                              ほ
970仕様書無しさん:03/04/10 13:41
getParent()したらNULLだった。(-_-)ウツダシノウ
971仕様書無しさん:03/04/10 16:03
#ifdef foo_h
#error 2重インクルード禁止
#endif
#define foo_h
972仕様書無しさん:03/04/10 19:17
次スレは?
973仕様書無しさん:03/04/10 20:09
>>971 死にたくなったというほど邪悪なコードじゃない気がする。
黙って

#ifndef foo_h
#define foo_h 1



#endif /* foo_h */

になおしておけ。
974仕様書無しさん:03/04/10 20:18
               ファサァ
       ∧_∧
       ( ・∀・)       ))
       /つ( ̄`ヽO_ノ⌒ヽ
      ノ   )        \ ))
     (__丿\ヽ ::    ノ:::: )
         丿        ,:'  ))
       (( (___,,.;:-−''"´``'‐' ←969


  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >_ノ⌒⌒⌒`〜、_
  _/し' //. V//⌒   ノ  ヽ) ←969
 (_フ彡     ニニニニニニニニ

叩くついでに建ててみるわ。
とりあえず番号はAでいいかな?
975仕様書無しさん:03/04/10 20:26
この会社辞めようと思ったソースコード#A
http://pc.2ch.net/test/read.cgi/prog/1049973793/l50

ちうわけで、建てました。以後のことは宜しく。
976969:03/04/11 01:12
自作AAで殴られるこの快感!
977仕様書無しさん:03/04/11 16:31
Mキターーーー(・∀・)ーーーーー!
978仕様書無しさん:03/04/11 19:28
>>975
979山崎渉
(^^)