トップページ⇒prog
198コメント71KB

Cのgoto文

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@1周年NGNG
C言語における goto 文の使い方について議論するスレッド。

昔は完全に敵視する人も居たが、 try ... catch 構文が
ないんだから適当に使わないとやっぱ汚くなるよな。
0002名無しさん@1周年NGNG
http://www.catnet.ne.jp/kouno/c_faq/c17.html#10
0003名無しさん@1周年NGNG
main()
{
loop:
printf("hoge");
goto loop;
}
0004>3NGNG
hogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehoge
0005>4NGNG
無限ループしてねえじゃねえか
0006鳥肌が立つほどゾクゾクしてクラクラするような goto 文の使い方NGNG
main()
{
int i;
i = 0;
loop:
printf("%d\n"@` i);
i++;
if (i >= 10)
goto loop_end;
goto loop;
loop_end:
return 0;
}

/* ああ、DOSのバッチファイルと見間違えてしまいそうだ・・・ */
0007>5NGNG
hogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehoge

C:\>^C

C:\_
00085NGNG
>>7
参った。
0009名無しさん@1周年NGNG
% a.out >/dev/null
■
0010名無しさん@1周年NGNG
こんな感じのコーディングを死ぬまで続けるってのどう?
ヘッダ部分は別ファイルにするとかしてさ。

#include <stdio.h>
#define START main(){
#define INTEGER int
#define IPRINT(a) printf("%d\n"@`a)
#define IF(a) if(a){
#define GOTO goto
#define ENDIF }
#define END }

START
INTEGER I;
l00:I=0;
ll0:IPRINT(I);
l20:I=I+1;
l30:IF(I<10)
l40:GOTO ll0;
l50:ENDIF
END
0011名無しさん@1周年NGNG
オモロイ
0012>10NGNG
ハヤシ信者ハッケソ
0013>12NGNG
ネタだろ。
っていうか、gotoの使い方について、もっと真面目に議論しようよ。
0014後藤NGNG
俺はパシリじゃねー
0015名無しさん@1周年NGNG
問題:ブロック越しの goto は許されるか?
{
int i; /*この変数領域がどうなっちゃうかがポイント*/
goto outside;
}
outside:
0016名無しさん@1周年NGNG
15の変形(外から変数宣言を飛び越えて中にジャンプする場合)
goto inside;
{
int i;
inside:
...
}

0017>15NGNG
回答者A
●ブロック越しのgotoは許されるか?
ブロックは変数スコープであり、gotoに関係ない。許される。
●変数int i;
iはスタックから破棄されるが、まだ値は壊れていないし、
また書き込んでも実行時エラーにはならない。
0018名無しさん@1周年NGNG
goto san; // 後藤さん
0019名無しさん@1周年NGNG
goto maki; // ごとまき
0020>15NGNG
スタックは、内部ブロックの分もまとめて関数先頭で確保され、関数末
尾で破棄されるから、下記のようなコードでも、問題ないはず。

void func(void)
{
 int * p;
 {
  int i;
  i = 100;  //なんでもいい
  p = &i;
  goto outside;
 }
 outside:
 printf("%d"@`*p);
}
002120NGNG
あーーー、厨房だ。
3行目を以下の2行に修正……。
int a;
int * p = &a;

初期化してないポインタだ。はずかしぃ
002220NGNG
いや、違う。21は撤回。なに考えてんだ>おれ
鬱だ死脳
0023>14NGNG
パシリにも使えん。(藁
0024名無しさん@1周年NGNG
void func(void)
{
 int * p;
 goto inside;
 {
  int i;
  inside:
  i = 100;  //なんでもいい
  p = &i;
 }
 printf("%d"@`*p);
}
こっちはどーよ?
0025>24NGNG
スタック(ローカル変数)は、内部ブロックの分もまとめて
関数先頭で確保され、関数末尾で破棄されるから、問題ない。
っていうか、実行時に変数宣言をする訳じゃないからなあ。
0026名無しさん@1周年NGNG
>っていうか、実行時に変数宣言をする訳じゃないからなあ。
ま、そりゃそだね。つか、

 {
  int i;
  inside:
  i = 100;  //なんでもいい
  p = &i;
 }

が関数と同様に動的にとられるのかな? とか思っただけ。
0027>25NGNG
そうなの?初めて知りました。
それって規格ですか?
002827の補足NGNG
まとめて確保されるの部分ね。
vois foo ( int x )
{
int i[100];
if( x > 0 )
{
int j[100];
...
}
else
{
int k[100];
...
}
}
…だと、常に300int分のスタックが消費されるわけですか?
0029>25NGNG
>実行時に変数宣言をする訳じゃないからなあ。
わかるように教えて。
コンパイル時にローカル変数がデータセグメントに
確保されるっていう意味じゃないよね?
0030>28NGNG
それだったら200*(sizeof int) でもよさげだねえ
003127の補足の補足NGNG
あー(^^;)例をしくじりました。
実行しないブロックがあっても、その分のスタックが関数呼び出し時に
確保されちゃうのか?ということが聞きたかっただけで…
んで、それが、処理系に依存しない「規格」なのかどうかを…
003225NGNG
>>27
規格かどうか?と聞かれると、「よく知らない……」ってのが
本当なんだけど、取り敢えず、BC++3.1では関数の最初で確保
されてます。
>>29
ローカル変数(グローバル変数でも一緒だけど)の領域が確保
されるのは、コンパイル時です。正確に言うと、ローカル変数
の場合、領域はスタックに確保されますから(データセグメン
トではなく)関数の最初に
sub sp@`6
等のように、領域を確保するコードが埋め込まれます。
003325NGNG
>>28
あ、あんまりいじめないで……。
そこら辺りは、コンパイラの最適化の範疇にはいるのではないで
しょうか?「規格か?」と聞かれると、「知りません」としか答
えられません。
ちなみにBC++3.1で、アセンブラコードを吐き出させてみたところ、
28のコードで確保されるスタックは、30さんの仰るとおり、
200*sizeof(int)になってました。
0034名無しさん@1周年NGNG
つーか、コンパイラ作成者に任せられてるハズ。
003525NGNG
って言うか、いちいち内部ブロックのスコープに入ったところで、
スタックを操作していると、非常に冗長なコードになるような気
がする。スコープに入る度に、sub sp@`n とか、スコープを出る
度にadd sp@`nとかがコードに埋め込まれるわけだから。例えば
forのループブロックの中に、そんなコードが入っていると、
1回ループする度に、sub sp@`n と add sp@`n が入る訳だし。
しかもgoto文の時は、その飛び先のスコープを判断して……、
なんて事になると、ややこしくてかなわない。
0036スポックの耳NGNG
ずっとブロック飛び越えのgotoの話になっていますが、これがgoto禁止論者の理由
の一つになっていることは確かです。ダメなコンパイラではこのへんを正しく実装
してない場合もあるでしょう。
ここで話題を最初に戻しましょう。
私は仕事でプロジェクトのコーディング規則で禁止されていない場合、gotoを使う
場合がありますが、エラー処理で関数を抜ける場合のみに限定しています。
これは、C++のtry〜catch構文の代わりとしてです。
それ以外でgotoを使うことは無いし、使うべきではないと考えます。
0037>36NGNG
ill structure の CUI の場合は如何ですか。
状態変数等を用意するまでもない場合、goto を結構使います。私の場合
0038ガハハNGNG
Dijkstraのいう構造化プログラミングちゅうのは、gotoを使うなという事じゃないぞ
 まず構造化を心がけて判りやすくやろうってことじゃ。
 判りやすくやったらgotoはそんなに沢山使ってない筈じゃろうって事じゃ
http://www.chienowa.co.jp/frame1/ijinden2/Edsger_Dijkstra.html

gotoを使わない為にどうするじゃなく、判りやすくやったらgotoがあんまりないって事じゃな。
 逆をやったら駄目だぞ。
0039名無しさん@1周年NGNG
gotoを使えばスパゲッティーになる可能性が高いが、
gotoを使わなくてもスパゲッティーになる。
 用は美しい設計をすれば必然的にgotoはなくなるよね。
って38の言ってることの焼き直しか。。
エラー処理でgotoを使った方がよりキレイなら使う。
どっちにしろ、エラー処理のところなんて設計全体でそう、多くあるもんじゃない。
0040名無しさん@1周年NGNG
>エラー処理のところなんて設計全体でそう、多くあるもんじゃない。
エラー処理のところでgotoを使った方がいいような場合は多くあるもんじゃない。
0041これはどうだNGNG
課題:N=4〜1000迄の数が素数かどうかをチェックしなさい
方法の一つは、√N迄の数で割った余りがを調べ
  0で無いのが一つでもあれば素数ではありません。

という課題があってgotoを使わない方がいいかどうか
0042一句NGNG
breakも gotoの一種と 思えけり
0043名無しさん@1周年NGNG
アセンブラに置き換えりゃどのみちジャンプ命令ばっかだよ。
goto使わなくても。
0044>43NGNG
だからそれを隠すためにアセンブラ以外の言語使うんだろ?
0045名無しさん@1周年NGNG
C++もCに分解できるしね。
0046>NGNG
使いません。私なら
for( N=4; N<=1000; N++ )
{
int m = (int)sqrt( (double)N ) + 1;
for( x=2; (x < m) && (N % x); x++ );
printf( "%dは素数%s。\n"@` N@` ((x < m)?("ではありません"):("です")) );
}
0047>41NGNG
言いたい事は判るよ。一つのルーチンとして書こうとしたら gotoを使いたくなる
でも、構造化プログラミングのもう一つの柱を使って、関数化してreturnによる
脱出を使えばいい。こんな感じね。
int check(int n)
{int i@`m=1;
 for(i=4;i<=n;i+=m+m+1)/*m<=√n迄*/
 {  m++;
  if( 0 == (n % m) ) return 0;
 }
 return 1;
}
int main(void)
{int n;
 for(n=4;n<=1000;n++)
 {
 if(check(n))printf("%4d"@`n);
 }
 return 0;
}
0048>46NGNG
でも、それなんか分かり難いんだけど
0049>42NGNG
以前粘着キティがそれを主張して揉めてたな。
蒸し返すのか?
005049NGNG
思い出したぞ。確か禁じ手を書くスレッドであたたという奴が
主張して叩かれてたんだよな
>break=goto

0051名無しさん@1周年NGNG
末尾以外にあるreturnもgotoと同じという主張は誰かしないの?
0052>44@`45NGNG
機械語にしたら全部0か1だしね
0053>42NGNG
>>49-50
いや、そのスレ知らない。
breakをたくさん使うソースを見たらなんか頭がこんがらがって
「これじゃgotoと変わらんな」って思ったことがあったから書いただけさ。
0054>48NGNG
そう?実に構造的かつC言語的だと思うけど?
goto も break も外部関数も無いから、叩き所が無くってツマんないかもしれんが(笑)
0055>54NGNG
コメントしっかり書けばOKだな。
でも、一般PGも容易に理解できるようなソースを書くことも能力だよ。
0056>53NGNG
それはあんたの頭が悪いだけだろ。
ループかswitch抜けるだけのbreakで頭がこんがらがって
gotoに見えてんじゃねーよ
0057>56NGNG
世の中には複雑怪奇なソースを書く奴がいることを知りな。
0058>57NGNG
複雑怪奇なソースだったとしてもbreak=gotoなんて思うのは
間違い無く頭が悪い。
複雑怪奇なこととbreak=gotoとは全く無関係の主張だろ。
ちょっと読みにくかったからといってbreak=gotoなんて結論
づけてしまう奴の言う事だから本当に複雑怪奇だったかどう
かも怪しいもので頭が悪くてまともなソースが複雑怪奇に
見えただけかもな。
0059>47NGNG
僕の場合、関数の途中にreturnを書くのって、気持ち悪いんだよ。
関数の最初の方でmallocしたメモリを解放することなく、関数の途中で
returnてなバグを出しまくった後に、やっぱり関数は最後でちゃんと後
始末をした後に抜けるようにしよう、ということにして、goto文を使う
ようになった。
有用なgotoの使い方だと思うんだけどなあ。しかし、周りの人間には、
未だ理解してもらえていない。
0060名無しさん@1周年NGNG
gotoがとやかく言われるのは、滅茶苦茶なコードを書く奴が
多いせいだ。後の事を考えて使えば、goto使った方が後で
見やすいプログラムになる事もある。
0061名無しさん@1周年NGNG
MASMみたいにラベルマクロを使えれば良いんだけど、
確定するのは名前を考えるのが面倒くさい
0062>59NGNG
同意。
関数の途中で何箇所もreturnして、構造化プログラミングなんてちゃんちゃらオカシイ!
0063>59@`62NGNG
お前等アホだろ。
Cでmallocした時だけfreeを忘れないように気をつければ
いい話しだろ。
C++だともっとスマートにできるしな。
関数の途中でreturnを使っていたら構造化されていない
なんてちゃんちゃらオカシイ!

006441NGNG
>>46  goto使わないと そういうコードになりますよね。
   あるいはbreakするかして、後で条件を再度見るという方法

>>47 それも一つの方法ですよね。でも、これも46さんと同じで
   いったん、条件を作って、後で再判断している。
   #あ別件ですが√Nをスマートに処理してるのは敬服しました

これらに比べて gotoを使うと 1回の条件判断で済むと思うのです。
私はこういう場合gotoを使った方が解りやすいと思うのですが。
0065名無しさん@1周年NGNG
ALGOLで勉強し直して来い >63
0066名無しさん@1周年NGNG
まぁ関数途中での return は「良いお作法」ではないわなぁ・・・
よく使うけど。
0067名無しさん@1周年NGNG
だからさ、お前ら>>38-39あたりをちゃんと読めよ。
goto文を使っちゃいけないんじゃなくて、普通に構造的な設計をすればgotoが必要な
場面はそんなにないという話だろう。
0068名無しさん@1周年NGNG
>56=58=63
なんでこんな煽り口調しか出来ないんだろうな。
まぁ、人間として馬鹿丸出しだからわかりやすいからいいけどな。
0069名無しさん@1周年NGNG
63はC++の自慢がしたいんだろう?
してみたら?
0070名無しさん@1周年NGNG
ねえねえ、
break n;
って欲しくなるとき無い?
forとかwhileの多重ループを、break 2;とかやると、二つ抜けてくれるの。
いや、そんなコード、後から見たら、何がなんだか分かんなくなるとは
思うんだけどね。
0071>68NGNG
そういう決めつけも煽りになってるんじゃないか?
言葉は悪いが56@`58は間違ったこと言ってないと思うぞ。
63の人は確かにちょっとお行儀が悪いな。
ただgotoかrerurn かについてreturn逆差別するのも
どかと思うな。gotoもreturnもようは使い方だろ。
007271NGNG
56@`58についてそう思うのは
>breakも gotoの一種と 思えけり
なんていきなり書く方が問題あると思うからだ
そういう意味でいくと
>関数の途中で何箇所もreturnして、構造化プログラミングなんてちゃんちゃらオカシイ!
といのもgoto批判と同じ穴のムジナの逆差別的で不快だね。
63は行儀は悪いし誉められはしないが気持ちは分る。
0073>70NGNG
perlはそれができるな
0074名無しさん@1周年NGNG
ネストからbreakで抜けるよりも、ラベルがある分、
gotoで抜ける方が俺は見やすくていいと思うけど。
というか、超多重ネストを避ける方がgotoうんぬん
よりも重要だと思うな。
0075名無しさん@1周年NGNG
break 0xffffffff;
で、プログラム終了して、OSシャットダウンして、電源まで
切ってくれるってのはどうだ。
0076名無しさん@1周年NGNG
breakはオーバーロードできないの?>C++な人
007773NGNG
ちょっと勘違いしていた。
回数で抜けるのはPerlでもできません。
よく読まずに書いてすまん。
0078>76NGNG
演算子じゃないから出来ないよ
0079名無しさん@1周年NGNG
なんだか盛り上がってますね
ところで私も関数の途中でreturn使うけどな。
何が悪いんだろ?
関数理解していたら、後処理忘れなんてしないでしょうし、
gotoで最後まで飛ばしたって関数理解できてなかったら
逆に余計な後処理をしてしまうことだってあると思うけど?
前処理後処理が煩雑になる危険性があるのは何を選択しても
Cを使ってる限りしかたないと思うけど。
あっこれ別にC以外の自慢をしているわけじゃないですよ(笑)
008059NGNG
>>79
>関数理解していたら、後処理忘れなんてしないでしょうし、
それを言ったら、この世にメモりリークのバグなんて存在しない
ことになっちゃうよ。
実は、僕も最近goto使わなくなったんだけどね。かといって、関数
の途中でreturnするのは、未だに気持ちが悪いのでイヤ。(関数途
中のreturnなんて、構造化プログラムじゃない、なんてことは言わ
ないけど)特にプログラムのスタイルを変えたつもりは無いんだけ
ど、いつの間にやらgotoって滅多に使わないようになっちゃった。
なんでだろう??
0081名無しさん@1周年NGNG
考え方によっては、C++のtry{...}catch{...}の方が、goto文
より凶悪なんじゃないだろうか?gotoなら、ラベルは少なくとも同一
関数内にあるのは分かってるけど、throwされた例外が、どのcatchで
受け止められるか、なんて、ソースをひっくり返して見てみないと分
からないんじゃない?
そりゃまあ、プログラムを作った本人は、自分でtry/catchを書いて
いる訳だから、分かっているとは思うけど。
0082>81NGNG
ソースひっくり返す必要なんか、何処にもないんだよ。

例外処理は、ある関数が例外を起こしたことを知らせるだけ。
送出した例外をどう処理するかは例外を送出する側の知ったことでは
ないし、呼び出し元はある関数を呼び出したときにどういう型の例外
が発生するという以外の情報は必要としない。
0083>80NGNG
だから、gotoなんて初めからほとんど使う必要がないからだよ。
>>38-39あたりを読めって。
0084>80NGNG
79の書いているように、何らかの危険性があるのはreturnでも
gotoでも一緒だと思うけど。
何がなんでもgotoで関数の最後に飛ばされてたら、そりゃ反発
食うの当然じゃないの?
008542NGNG
面倒だけど。

for(a = 0; a < 100; a++)
 {
  printf("a=%d\n"@` a);
  if(a == 5) break;
 }

printf("out:%d\n"@` a);

これがbreakがgotoと変わらんなと思う理由。
この使用法だとbreakはgotoと全く変わらんだろ。

breakの使用がどーのこーのとケチを付けるつもりは
全くないが、gotoの使用が構造化プログラミングを崩すと
言うのであれば、breakにも危険性は十分あると言いたいだけ。

>>67
おまえが引用してくれた39は俺だ!
煽るように突っかかってきて気分悪いわ。おまえ。

breakがgotoと一緒かどうかは使い方によるけど、
gotoと変わらん悪質な使用法も出来ることは覚えていて良いんじゃないか?
(goto自体が悪質だという意味ではない。)
0086>42NGNG
全然違うと思うが?
for文とif文が矛盾しているのが変なだけで、
別にbreakがgoto文と同じなわけじゃないじゃないか。
if の判定がまともだったら、すごくまともなプログラムで
breakの使い方でしょう。
悪質な使い方=goto文とでもいいたいわけ?それなら、
なんにだって当てはめられるじゃないか。論理が滅茶苦茶。


0087名無しさん@1周年NGNG
gotoのどこに問題があるかを理解していれば、問題のない使い方も
わかるはず。gotoを偏執的に排除しようとするのはただのヒマ人だね。
0088>86NGNG
>for文とif文が矛盾しているのが変なだけで、
どこが矛盾?

>別にbreakがgoto文と同じなわけじゃないじゃないか。
もうちょっとよく考えなさい。

>if の判定がまともだったら、すごくまともなプログラムで
>breakの使い方でしょう。
まともかどうかはしらん。ただ、俺はこんな書き方は嫌いだ。
でもそれを押し付けるほどではないと思っている。

>悪質な使い方=goto文とでもいいたいわけ?
後半をしっかり読め。どこにも書いてないだろ。。。
おいおい、もっとしっかり読んでから返事しろよ。。

>論理が滅茶苦茶。
読解力がめちゃめちゃ。ここまで素直な文章なんだ。しっかり読みなさい。
0089>87NGNG
同感だが、少なくともこのスレッドではgoto排除者って
いるのだろうか。
gotoにかこつけて、breakだとかreturnだとか別のものを
排除したり的外れの批判する人が多いように思うわ。
0090名無しさん@1周年NGNG
>gotoにかこつけて、breakだとかreturnだとか別のものを
>排除したり的外れの批判する人が多いように思うわ。
breakがないswitchは大変だね。
returnを使用できない関数はもう、大欠陥だね。
そんな馬鹿なことを言ってる人は一人も居ないよ。
 初心者には難しいのか?もしかしてこの話題は。
0091>88NGNG
どこがって・・・5で必ず抜けてるから100までループさせる
必要無いけど?
そのことが間違っていると言ってたんじゃないの?

よく考えろってあなたの書いていることからこれ以上考えようが無いが?
悪質な使い方だからbreakがgotoと一緒って言ってるようにしか
よめないけど。
そもそもどんなに使い方が悪質でもbreakをgotoと同一視することに
無理があるでしょう。
0092名無しさん@1周年NGNG
breakは少なくともソースの前のほうに飛ばない事がわかってるし、
1つ上のループを抜ける事も解るわけだし。
この程度はgotoよりはマシって気もするし、使い方がおかしければ
どんなんでもクソになっちゃうのもわかるし。うーん・・・
0093>90NGNG
変な煽りだねぇ。事実そうなんだからしょうかないやん。
retrunを使うと構造化じゃないとか、break=gotoと一緒だとか
おかしな意見がいっぱい。それを指摘したら初心者になるのかい?
009486じゃないけどNGNG
>>for文とif文が矛盾しているのが変なだけで、
>どこが矛盾?
forの終了条件が、ifの条件式とその結果によって意味をなさなくなって
いるあたりが矛盾。
このおかげで、コード自体がgoto=breakのことなどどうでもいいぐらい
に無意味なコードになっている。
つまり、このコードはbreakの邪悪さを説明する例としては全く不適当。
例を出すならもう少しましな例を出して欲しい。
0095名無しさん@1周年NGNG
gotoで前に飛ばして、ループを作る奴は、さすがに居ないだろう。
と思っていたのだが、先日、初めて見た。取引先が作ったコード
なんだけど、
label:
 hoge();
 if(count ==5)
  goto label;
とかって、マジメに書いてた。いやあ、貴重な物を見せてもらった、
と、なんだか嬉しくなっちゃったよ
0096名無しさん@1周年NGNG
forで要素数ぶんのループをまわして、目的の要素が見つかったら
breakで抜ける、っていうのは、ごく普通の使い方だとおもうなぁ。
009785NGNG
だめだこりゃ。。はぁ、もう、好きにやって。。。
K&Rの「3.8 Gotoと名札」でも読んで下さい。。
それと、>>85のような簡単な例を見て、それがすべてだと思わないこと。
さて、帰ろう。。。
009885NGNG
>ごく普通の使い方だとおもうなぁ。
悪い書き方とは言ってないよ。んじゃ。。
0099名無しさん@1周年NGNG
けっきょく、コードが読みやすいかどうかなんて、書いた本人には解らない
ってことだな。
0100>85NGNG
論理も滅茶苦茶だが逆切れの仕方も滅茶苦茶な奴だなぁ。
話にならない。
お前が出しきた例で、
>この使用法だとbreakはgotoと全く変わらんだろ。
だとか
>gotoと変わらん悪質な使用法も出来ることは覚えていて良いんじゃないか?
だとか言ってたんだろ。


0101名無しさん@1周年NGNG
>97
だからさ、例が悪すぎるんだって。
どうせやるなら、もっとうまく書けばよかったのに。

void f(void)
{
 int a@` i;

 for(i = 0; i < 100; i++){
  scanf("%d"@` &a);
  printf("%d\n"@` a);

  if(!a)
   break;
 }
 return;
}

例えば、こんな感じの例を出せばよかったのに。
‥‥‥と、書いてみて思ったが、この例何か問題あるか?
(もちろん、scanfを使ってるとかそういうことではなくて)

っていうかさ、何度も同じこと言わせないでよ。
goto文は、普通は使う必要がないから使わないだけであって、
そこにgoto文を使う必要があると判断すれば使えばいいの。
0102>101NGNG
>‥‥‥と、書いてみて思ったが、この例何か問題あるか?
だよね(笑)
break文の間違った使い方でgoto文と同じという例には
なってないよね。
っていうか85は相手にしては駄目な人なんでしょう。

0103>79NGNG
理解とかそういう話ではなく、後処理を共通化するためにgotoを使うって事でしょう。
エラー処理でこの手の使い方はよくやるね。
0104>102NGNG
>っていうか85は相手にしては駄目な人なんでしょう。
最近そういう奴の絡んでくるスレッド多いな。
数ヶ月前はもっとまともだったような気がするんだが・・・
0105>103NGNG
まあね。でも、それなら別のサブルーチン呼んで階層化した方がいい場合がおおいよ
int funcB()
{
if(・・・) return TRUE;
return FALSE;
}
void funcA()
{ char *mem=malloc(SIZE);
 funcB();
 free(mem);
}
010659NGNG
最近goto文を使わなくなったのは何でだろう?と自分なりに考えてみたのだが、
要するに関数内のエラーチェックの手法が、「エラーがあることを確認して、
処理を中断する。」から「エラーが無いことを確認して処理を続行する。」に
変わったからだと思う。つまり、

if(JudgeError()) goto label;
Hoge();
label:

とかやってたのを、

if(!JudgeError()){
Hoge();
}

に書き方を変えたって事。
そのかわり、後者の書き方だと、中括弧のネストが深くなり、当然インデントも
深くなるわけで、ソースが見にくくなるんだよね。
goto文を使った書き方、ってのはDOS上でプログラムを書いていた時代、画面の横
幅が80桁しかなく、インデントが深すぎると、ソースが画面からはみ出してし
まい見づらくなる場合に使っていた方法で、Windows上でプログラムを書くように
なってからは、広い画面が使えるので、少々では画面からはみ出さない、心おき
なくインデントが使える、と。
要するに、横幅の広いエディタを使えば、goto文は使わなくてもいい、ってことだ。
(ちがうか??)
0107103>105NGNG
こんな理由で階層化してると関数だらけになる事必至。
0108名無しさん@1周年NGNG
>>97
>K&Rの「3.8 Gotoと名札」でも読んで下さい。。
こらっまともな例も出せない初心者がK&Rを冒涜するな
そこにはお前が主張しているようなbreak=gotoなんて
書いてないし書いているわけないだろ。
0109103>106NGNG
エラー処理ごときで正常系のコードをインデントしたくないなあ。
ま、2段くらいだったらやるけどね。
0110ε>106NGNG
何で、gotoが必要かと言えば、後処理をする必要があるからだろう。
つまり、
a = malloc(foo);
if(JudgeError())
 goto end;
Hoge();
end:
free(a);
return;
(細かいとこには拘らないでくれ)

というコードの場合、以下のように出来るならばgotoが必要なくなる。
if(JudgeError())
 return;
a = malloc(foo);
Hoge();
free(a);
return;

ま、どうしても必要なgotoを無理に消す必要はないんだけどな。
0111108NGNG
>>102
そもそも85はC初心者なんだろうよ。
あの間抜けな例を見て確信したよ。
こいつは初心者でbreakで流れが分れるともうコードを
追えなくなってしまうような奴なんだ
だからgotoと一緒だとか分けのわからないことを
言うんだろう
011259NGNG
>>109
僕のコードの場合、5段6段のインデントは当たり前。下手すると、
Windows環境ですら、画面の右端を超えそうになる場合も、あり。
あー、だめだー。関数途中のreturn、許可しようかしらん……。
011385NGNG
やあ。問題児扱いの85です。
さて、あれから考えて、なぜ、
「gotoのループ脱出の使い方とbreakが同一視できるか」を理解できないかを
考えてみました。
>>108はK&Rを持ってるようなので、読んで欲しいけど、
p.80の上の方にgotoの有用な例として
「最も一般的な使用は、例えば二つのループから一度に抜け出す時の
 ように、深く入れ子になった構造での処理を中断させる場合である。
 break文は最も内側のループを抜け出すだけなので
 直接使用することは出来ない。」
とあるでしょ。じゃあ、ループが一つの時には。。?
breakが使えるってことでしょ。なにかピンと来ない?
また、breakを使用した時、CPUのIP(instruction pointer)はどう動く?
ここまで言ってbreakとgotoが同一視できるということにピンと来ない?
 なんか、文章を読みきれないのか知らないけど、
break文とgoto文が全く同一とは言ってない。ただ、
ループ脱出のgoto文の使用がbreakとほぼ同一の効果となるから
この時は同じ物として見れると言っているだけ。

あと、>>85の例だけど、あれはループ脱出を示しているのであって
for loopが100回まわってるのに、if(a == 5)がおかしいというのは
悲しくなったよ。「1を聞いて10を知る」ここまでは無理でも
「1を聞いて1.2を知る」ぐらいにはなりましょうね。
問題の本質はbreakの使用による効果であり、ループが無駄に回っている
ってのは問題を簡単にするためでしかない。
 長いけど、頑張ってよんでね。
さぁ、どんどん突っ込んでくれ。君らの知的レベルに乾杯!
0114>110NGNG
aのNULL判定をすると、結局上の方のコードになっちゃうよ。
011585NGNG
あと、知的レベルが想像を絶している一部諸君のために言っておくけど、
gotoで2つ以上のループを抜けるときにbreakで代用できるだろ?
もちろん、returnでかける場合もあるだろうけど。
returnはまた、意味合いがことなる。
gotoの代わりにbreakで切り抜けられる。これは
gotoとbreakの同一性があるためだとは分からないかい?
0116名無しさん@1周年NGNG
while(a > b){
++a;
goto label;
}

for(b = 0;b < 100;++b){

label:
c = a + b;
}
0117108NGNG
>>85
だから初心者がK&Rを冒涜するなって言ってるだろ
そんな意味で書いてないだろ。breakで抜けきれない時に
goto文を使うのは有用な例だと書いていだけだろ。
後半は前の方の発言でアセンブラにしたら全部ジャンプ命令
だとか言ってた奴と変わらない論理だな。語る価値も
無い問題外だ。

85の例の間抜けさはは例を直しても一緒だって指摘されて
いるだろ。
お前のは1じゃなくて-10000ぐらいの例なの。分るか?
そもそもループが無駄に回っても問題は簡単にはなってないし
間抜けなだけだ。お前実際C初心者だろ?
011885NGNG
>117
さぁ、そんな熱くならずに。自分の馬鹿さかげんを
晒してるだけだよ。

for(a = 0; a < 100; a++)
 {
  if(a == 5) break;
 }

printf("%d\n"@` a);

と

for(a = 0; a < 100; a++)
 {
  if(a == 5) goto LABEL;
 }

LABEL:

printf("%d\n"@` a);

では本質的な違いがあるかい?
言ってごらん。
0119108NGNG
>>115
お前よく次から次へと間抜けな発言が出きるな
>gotoで2つ以上のループを抜けるときにbreakで代用できるだろ?
なんだそりゃ?
先に釘指しておくが日本語か論理が変なのを他人の読解力のせいに
するなよ>C初心者
0120>108NGNG
>>118
誰から見ても馬鹿な奴に馬鹿といわれても腹はたたないよ。
それはbreakをgotoで書きかえた例を出しているだけだろ。
gotoの間違った使い方でしかない。


012185NGNG
>108
うーん。困りましたね。

>先に釘指しておくが日本語か論理が変なのを他人の読解力の
>せいにするなよ>C初心者
あなたのその日本語も見るに耐えないのですが、まぁ、いいでしょう。
理解できないのですね。かわいそうに。。
いや、いいんです。初心者が理解できる内容じゃないんだってはっきり分かってきたから。

0122ε>114NGNG
aがNULLなら、その時点でreturnすればいいじゃん。
‥‥‥いや、この例の場合はね。
あくまで、gotoを消す手法の例の1つとして挙げただけだし。
0123名無しさん@1周年NGNG
85の相手するの、もうやめようよ、いくら言っても解らないやつ
なんだからさ。
012485NGNG
>108
>gotoの間違った使い方でしかない。
そう。その通り。これは無理矢理gotoでbreakの代わりをさせただけ。
代わりをさせられる。まだ、分かりませんか?
012585NGNG
http://www.2ch.net/test/read.cgi?bbs=prog&key=949651694&st=55
懐かしいです。初心者の哀れな姿ですよ。>108
0126>122NGNG
gotoをなくすのに処理の順番変えるのは誤解が生じやすい例だったかもね。
0127108NGNG
123の言うとおりなんだけどな
ヒマなのでもうちょっとだけ付き合ってやるよ
>>124
だからそれはアセンブラにすれば全部ジャンプ命令だと
言うのと同じ理屈だって言ってるだろ
屁理屈はいいから、とっとと
>gotoと変わらん悪質な使用法も出来ることは覚えていて良いんじゃないか?
こっちの例を出してbreak=gotoを証明しろよ

0128名無しさん@1周年NGNG
なんか話をしている土台が食い違っているような気がする (^^;) goto と break …

goto=break派は、goto をマシン語レベルの jump とし捉えているんだよねぇ?
K&Rによると、continue は
for(;;)
{
goto contin;
...
contin;
}
と等価であるという説明文があるが、これを break で考えてみると
for(;;)
{
goto brk;
...
}
brk:
とかになると思う。(少なくとも俺にはそう考えるのが自然だ)
break の説明を行うのに、上記のような例を用いても構わないだろう。

しかし、だからと言って break=goto な訳ではなくて、上記例は
goto のごく限られた(おそらく有用な)用法の1つにしか過ぎず、
もっとも恐れるべきは goto は無制限に悪用されうる。
…というのが break≠goto 派の意見だと思うんだけど、違う?
0129>85NGNG
ねぇ、君ホントに>>39?
っていうか、もしかしてただのGOTO禁止教の信者?
gotoが悪なんじゃなくて、おかしなgotoの使い方が悪なんだと何回説明
させれば気が済むわけ?
0130108NGNG
>>125
誰が見ても初心者な奴に初心者といわれても(以下略)

どうせ他人を出すならもうちょっと俺っぽい奴を
出してくれよ(笑)
0131名無しさん@1周年NGNG
for(i = 0;i < 25;++i){
for(j = 0;j < 30;++j){
a += b[i][j];
if(a > 100)break;
}
}

for(i = 0;i < 25;++i){
for(j = 0;j < 30;++j){
a += b[i][j];
}
if(a > 100)break;
}


for(i = 0;i < 25;++i){
for(j = 0;j < 30;++j){
a += b[i][j];
if(a > 100)goto label;
}
}
label:

for(i = 0;i < 25;++i){
for(j = 0;j < 30;++j){
a += b[i][j];
}
if(a > 100)goto label;
}
label:
013285NGNG
>128
あなたのおっしゃることが全てです。
break == gotoなんて思っているわけでもないです。勿論。
あなたのおっしゃるように、
>goto のごく限られた(おそらく有用な)用法の1つにしか過ぎず、
です。
 だいたい、break==gotoなんてちょっと考えれば相似点と相違点が
すぐ分かりそうなものなのに。。はぁ。
0133ε>126NGNG
> gotoをなくすのに処理の順番変えるのは誤解が生じやすい例だったかもね。
む、確かに。
でもまあ、どうしても必要なgotoまで消す必要はないしね。
普通に設計すればgotoを使わなきゃならない可能性は低いし。
0134>85NGNG
で、「breakがgoto同様、構造化プログラムを破壊する危険性を持つ」
ってのはどうなったの?
0135名無しさん@1周年NGNG
>break == gotoなんて思っているわけでもないです。勿論。
お前には恥も何もないのか?
128が言ってるようなことなんて先に指摘されてるじゃないか。
アセンブラにすればジャンプ命令と言ってるの同じって。
128を逃げの口実に使ってるんじゃないよ。
0136名無しさん@1周年NGNG
85は構造化とか抽象化とかっていう概念がわからないんだね。
関数呼び出しは、gosub-returnで代用できるとか、ローカル変数
は名前をちゃんと管理すればグローバル変数でもいいとか言い出しそう。
013785NGNG
>134
頑張って!もう、128さんのような人が居たからもういいよ。
ちなみに、breakが危険だと感じたのは今までで一回しかないし、
それも特殊なケースだからな。
ループがネストしまくりでbreak文とif文のあらしだったといえば
君の頭脳でもちょっとは想像がつくかな?
 例としてですには長すぎるし、あんなソースは見たくもないし、
だいたい、仕事のソースだから見せられん。
 君がbreakが危険だと認識できるようなソースに出会わないことを
祈っておくよ。
0138ε>114NGNG
っていうか、細かいことには拘らないでって書いておいたのに。(笑)
013985NGNG
>135
>128が言ってるようなことなんて先に指摘されてるじゃないか。
誰も指摘しなかったからここまで長引いたんじゃん。
 アセンブラ云々はヒントでしかない。
>>128のbreakとcontinueの説明にgotoを使用している。
これが全てだろ。
>(少なくとも俺にはそう考えるのが自然だ)
俺もそう考えるのが自然なだけ。
アセンブラが分からない君でもこの説明ならわかるだろ?
で、アセンブラが分かれば理解が深まるってだけさ。
0140128NGNG
関数の途中での return は、うっかり free し忘れ…のような
つまらないバグを避けるため、なんとなく嫌う人が居るのだと思う。

自分で書いたコードではなくて、他人の書いたコードの
メンテを任されたと考えてくれ。
そのコードは恐ろしく深いネストと、ネスト先での return の固まりだった。
おまけに関数の先頭では、作業領域を malloc している。
ここから、あらゆる場合を尽くして、メモリーリークを見つけるのは困難
なような気がする。

このような混乱を軽減してくれるのが「構造化プログラミング」ではないの?
なんていうかな… malloc と free の対応づけとか…
fopen と fclose の対応づけとか…
そういうのが自然と構成されるような書き方が「構造的」
なのでは?

…って、上記はあくまで理屈であって、goto も、関数途中の return も
使いまくっているけどね。俺(笑)
0141108NGNG
>>137
こらこら逃げに入っているようだが話が戻ってるぞ。
breakを悪い使い方してもgoto文と一緒にはならない
という指摘は既に前の方で誰かがしてたよな。

別に仕事のソース出さなくても例ぐらい普通書けるだろ。
0142134NGNG
>>137
こらこら、話が本題に入る前に逃げるんじゃない。
0143114>εNGNG
すまんの。
110の上のは「メモリを取ったあとにエラーが発生した場合」の良い例
だと思ったんでね。
0144108NGNG
>>139
俺とアセンブラの事でも競いたいのか?
やりたいなら別にいいぞ(笑)
014585NGNG
>141
だから、なんで、
おれがgotoが悪だと言う認識をしていると思ってんのかねぇ。?
 もちろん悪だけどたまに善。
絶対使っちゃいけないわけではない。って認識なんだけどなぁ。
 だいたい、breakを悪用するなんてなかなか難しいぞ。
ちょっと考えれば分かるけど。。
gotoのホンの一部の機能しか持っていないし、
しかも有用な機能のだからな。

>別に仕事のソース出さなくても例ぐらい普通書けるだろ。
めんどくさいって。なんで、そこまで俺がしなきゃならん?
複雑に入れ子になったループからbreakで抜ける時を考えてみろよ。
とんでもない数のbreakになるぞ。ちょっとは自分で手を動かして
考えてみなさい。
0146ε>143NGNG
マターリしてるね。(藁
014785NGNG
>144
>俺とアセンブラの事でも競いたいのか?
>やりたいなら別にいいぞ(笑)
がんばれ
0148名無しさん@1周年NGNG
>>137
あれ??元々それが言いたかったんじゃないの?
>>breakがgotoと一緒かどうかは使い方によるけど、
>>gotoと変わらん悪質な使用法も出来ることは覚えていて良いんじゃないか?
スレの本題からはずれるような気もするんだけど。
0149108NGNG
>>145
こら苦し紛れに話しをすり替えようとすんなや
>おれがgotoが悪だと言う認識をしていると思ってんのかねぇ。?
そんなこと誰も言ってないだろ。

>だいたい、breakを悪用するなんてなかなか難しいぞ。
お前がそういのがあるって言ったんだろ。

言い訳はいいから例も書けない初心者なら初心者だって
最初から言えよ。

0150名無しさん@1周年NGNG
85は1つ書きこむごとに人格が入れ替わるヒトなんだね、かわいそうに。
0151131NGNG
if@`while@`forもコンパイルしたら、
比較とgotoの組み合わせでしかない。
0152名無しさん@1周年NGNG
そもそも85の例は、「gotoと結果が同じ」っていうだけで、本質的には
まったく別のもんだとおもうけどな。

それより、85が只の荒し厨房になってしまったから、そういうヤツを
相手にするやり方でいきましょう(藁
0153108NGNG
堂々巡り仕出したのでこれ以上面白くなりそうもないな。
俺はそろそろ下りるよ。
まぁいい暇つぶしになったわ。じゃぁな。
0154>85NGNG
> アセンブラが分からない君でもこの説明ならわかるだろ?
> で、アセンブラが分かれば理解が深まるってだけさ。
んで、アセンブラが分かったら何?
きちんと構造化されたソースからコンパイラが吐き出すコードはスパゲッティな
ソースから吐き出されるコードより読みやすいとでも?
っていうかさあ、breakやgotoの実装はどうでもいい訳よ。
問題は、ソースコードが読みやすいかどうかなんだから。
015585NGNG
>151
しかし、C言語レベルではgotoをうまく隠蔽している。
breakとcontinueだけが片鱗を見せている。

まぁ、jumpだけど、それはいいね。分かって書いてるだろうから。
0156131NGNG
「隣の家にこれを届けろ」
「住所が○○の所にこれを届けろ」
015785NGNG
>そもそも85の例は、「gotoと結果が同じ」っていうだけで、本質的には
>まったく別のもんだとおもうけどな。
あいたたた。。またそこにもどるのか。まぁ、いいけど。

>それより、85が只の荒し厨房になってしまったから、そういうヤツを
>相手にするやり方でいきましょう(藁
うん。たのしいね。でもそろそろ仕事しなきゃいけないんだけど。

>んで、アセンブラが分かったら何?
>きちんと構造化されたソースからコンパイラが吐き出すコードは
>スパゲッティなソースから吐き出されるコードより読みやすいとでも?
想像力がたくましいね。

>っていうかさあ、breakやgotoの実装はどうでもいい訳よ。
そのとおり。

>問題は、ソースコードが読みやすいかどうかなんだから。
そのとおり。

全く同意見。
0158>85NGNG
> もちろん悪だけどたまに善。
それも違う。
そこに必要だから使うのが善。
必要もないのに多用するのが悪。
015985NGNG
>158
細かいね。君の言う通りだと思うよ。
016085NGNG
>156
>「隣の家にこれを届けろ」
>「住所が○○の所にこれを届けろ」
そう。その程度の違いであって
けっきょく届くところは一緒。
もちろん、隣の家と住所が○○の所が同一ならね。
うまいたとえだな。
016185NGNG
さて、レスも無くなったようだし、仕事するか。。。
0162εNGNG
ねえ、マターリいこうよ、マターリさあ。
痛いよ、この人。
0163名無しさん@1周年NGNG
85ってねえ、gotoの有用性を説明するために、breakを持ち出
してくるところが、バカなんだよ。結局85の論理って、「goto
が悪いって言うなら、breakだって汚いコードを書こうと思えば書
ける。どっちも似たような物じゃないか。」ってね。しかも、その
例に出そうとしいるのが、自分ですら一度しか見たことがない、
という糞コード。(85が書いたんじゃあ、無いんだろうけどさ)
そんな例を出してきても、そのコードを書いた奴が糞なだけで、
goto文の有用性を証明することには、全くならない。って分かんな
いのかな?
0164名無しさん@1周年NGNG
156は160と逆の意味だと思ったんだけど・・・
0165131NGNG
そうしましょうか。
0166名無しさん@1周年NGNG
そうそう、マターリとね。
0167名無しさん@1周年NGNG
要するに、
gotoだけじゃなく、breakでも、こんなに汚いコードが
書けます!私はそれを見たことがあります!!
って言いたかった、ということだ。
0168goto悪の歴史(※かなり想像)NGNG
・構造化プログラミングが興る
・goto文の必要性が薄れる。
・goto文のないプログラミングが流行る。
・goto禁止教発足。
・goto文が悪と見なされるようになる。
0169じゃあ 3択 でNGNG
課題は >>41 素数を探せという仕様  どれが好きですか?
1){int i@`m@`n;
   for(n=4;n<=1000;n++)
   { /* i= m*m になるようiに累計 */
    for(m=2@`i=4 ; i <= n ; i += 2*(m++)+1)
     if( 0 == (n % m) )  goto next;
    printf("%5d"@`n);
   next:
   }
2) >>46 さん (break 派もこれに投票してね)
 for( N=4; N<=1000; N++ )
 {
  int m = (int)sqrt( (double)N ) + 1;
  for( x=2; (x < m) && (N % x); x++ );
  printf( "%dは素数%s。\n"@` N@` ((x < m)?("ではありません"):("です")) );
 }
3) >>41 さん
int check(int n)
{int i@`m=1;
 for(i=4;i<=n;i+=m+m+1)/*m<=√n迄*/
 {  m++;
  if( 0 == (n % m) ) return 0;
 }
 return 1;
}
{int n;
 for(n=4;n<=1000;n++)
 {
 if(check(n))printf("%4d"@`n);
 }
 return 0;
}
0170131NGNG
だいたいforループ上とかでbreak使うよりは
do〜whileで、条件一致すると抜けるようにするけど。
0171まさしくこの状態だな。NGNG
" 書き方論争(style wars)"に引きずり込まれても、たいてい何も産み出さない。
0172名無しさん@1周年NGNG
とりあえず「そのどれでも無いとき」にだけ printを実行したいとする
1)gotoを使う
2)breakまたは複数終了条件にて終わらせ、後で条件チェック
3)別の関数を作って return で抜けさせて、その帰り値で条件判断
017385NGNG
>167
ほんと。その通り。軽い気持ちで書いたら煽り煽られ、アオらーになりました。
おかげで仕事が進みませんでした。
>171
まさしくその通り。

でも楽しかった。。。ちょっと。
0174>169NGNG
おいおい、1)のgotoの使い方、それは無いだろう?
0175167NGNG
>>173
あー、そんな答えが返ってくるとは思ってなかったので、非常に恐縮だが、
167=163
だからね。
0176169>174NGNG
え? どこ? コンパイルして動作チェックはしたけど?
0177174NGNG
わざわざgoto使わずに、素直にbreak使えよ。ってこと。
0178131NGNG
>>176
これは
if( 0 == (n % m) )  goto next;
    printf("%5d"@`n);
   next:

こう書けると思うのは気のせいか?
if( 0 != (n % m) ){
      printf("%5d"@`n);
}
0179169>177NGNG
試しに書いてみて下さい (^^; たぶん2)のようになると思いますけど
0180174NGNG
ちがうや、continueだ。
0181131NGNG
あ、おおぼけ。
上のforを見てなかった。
>>177の通りです。
018285NGNG
>>175
あー。んじゃ、ちょっと書くかぁ。

>85ってねえ、gotoの有用性を説明するために、breakを持ち出してくるところが、
>バカなんだよ。
gotoの有用性を説明した覚えはない。

>結局85の論理って、
>「gotoが悪いって言うなら、breakだって汚いコードを書こうと思えば書ける。
> どっちも似たような物じゃないか。」ってね。
似たようなものとは思っていないが、breakも使い方一つだと言いたいだけ。

>しかも、その例に出そうとしいるのが、自分ですら一度しか見たことがない、
>という糞コード。(85が書いたんじゃあ、無いんだろうけどさ)
そう。あれはひどかった。。
ここまでやるなら関数に分割して処理するか、いっそのことgoto使え!と思ったな。

>そんな例を出してきても、そのコードを書いた奴が糞なだけで、
>goto文の有用性を証明することには、全くならない。って分かんないのかな?
goto文の有用性はK&Rに書いてある例が精一杯でしょう。
なんであの例を見て、goto文の有用性を示す例になるのか不思議だ。。。

はい。突っ込みどうぞ。
0183169>178NGNG
ああ、そのif文は前のfor文の中身です。
{}を省いたのが誤読を誘ってしまいました。ごめんなさい

  for(m=2@`i=4 ; i <= n ; i += 2*(m++)+1)
    {
     if( 0 == (n % m) )  goto next;
     }
    printf("%5d"@`n);
   next:
018485NGNG
>似たようなものとは思っていないが、
いや、似たようなものだと思ってるんだ。。。
0185>176経由174NGNG
for が if にしか掛かっていない点の見落としでしょう。
ちょっと見、単なるスキップに見える (^^;
018685NGNG
って、別の話題で盛り上がってんのね。ごめん。もう落ちます。。
0187185NGNG
あ!遅すぎた(^^;ハズカシイ
0188131NGNG
>>183
あ、そういう事?また誤読(笑)
わかりました。
0189174NGNG
ごめん、ごめん。ループを読み間違えていた。
169で正しいです。陳謝
0190131NGNG
早とちりした自分が恥ずかしい。
0191169NGNG
ありゃ、goto より { } と インデントが大事という結果になってしまいましたか。
申し訳ない。

でも火消し効果はあったようで一安心(^^;
0192うむNGNG
goto/break/return 論より 「判りやすく書く」事が万倍大事って事ね。

2CHにあっても煽らず、煽りにのらず、煽られず。
貴重な時間を無駄にしたくないなら これも万倍大事。
0193163NGNG
>>85ってねえ、gotoの有用性を説明するために、breakを持ち出してくるところが、
>>バカなんだよ。
>gotoの有用性を説明した覚えはない。

>>85からの引用
>gotoの使用が構造化プログラミングを崩すと
>言うのであれば、breakにも危険性は十分あると言いたいだけ。
breakを引き合いに出して、gotoの有用性を説いているようにしか
読めないが?

>>145からの引用
>おれがgotoが悪だと言う認識をしていると思ってんのかねぇ。?
> もちろん悪だけどたまに善。
>絶対使っちゃいけないわけではない。って認識なんだけどなぁ。
と、有用性を限定しているのも、もちろん読んでいるけどね。


>>結局85の論理って、
>>「gotoが悪いって言うなら、breakだって汚いコードを書こうと思えば書ける。
>> どっちも似たような物じゃないか。」ってね。
>似たようなものとは思っていないが、breakも使い方一つだと言いたいだけ。

 一つ質問。118辺りで、例を示して、gotoとbreakの本質的な違い、ってのを
云々していたが、「あの例では、本質的に同じ」って事を導いてから、どうやって
話に落とし前を付けるつもりだったの?「breakも使い方一つ」って?
 なんだ、そりゃ。要するに、「goto文もbreak文も、使い方一つ」って言いたい訳?
 はあぁ。もうちょっと表現力を身につけろよ。例の出し方も最悪じゃねえか。
しかもみんながgotoの事を話しているときに、なんで唐突にbreakが出て来るんだよ。
その説明も、情報を小出しに、小出しにして。よっぽど表現力がないか、もしくは自分
からみんなに誤解されるように書き込んでいるとしか思えないね。あれか?他の物が誤
解しているのを横目で見ながら優越感にでも浸っていたの?

火は既に消えているようなのでsageる
0194>193NGNG
煽る方も、そういうのをハッキリ指摘しないで85が語るに落ちるのを見て
楽しんでた感じだったからね。
0195名無しさん@1周年NGNG
犬のケンカ。
犬ってね。ケンカしはじめちゃうと相手以外見えなくなっちゃうんだよ?
まわりで迷惑している連中も居るのにねえ。
しょうがないね。犬は。
0196>194NGNG
結構はっきり指摘されてたと思うが?
0197名無しさん@1周年NGNG
喧嘩上等age
0198出張じじぃNGNG
結局85は 煽りに負けて壷の暗黒面に引き込まれてしまったようじゃな。

煽りに負けてはいかん。かわすのじゃ。
そして自分のミスは、素直に謝罪するのじゃ。
>>169からのやり取りを参考にするのじゃぞ。
誤読されながらも169は自分から申し訳ないと謝罪し >>189 >>190
とまったりとした決着を迎えられたのじゃ。

もう一度言っておこう。煽りに負けてはいかんのじゃ。
いかに技術を持っておろうと、煽りに負けるようではな まだまだじゃぞ
■ このスレッドは過去ログ倉庫に格納されています