Cでgotoを使わない理由を考察するスレ
レス数が1000を超えています。これ以上書き込みはできません。
0001仕様書無しさん
NGNG0002さとし
NGNG0003仕様書無しさん
NGNG−−−−−−−−−−−−終了−−−−−−−−−−−−
0004仕様書無しさん
NGNG0005仕様書無しさん
NGNGすまん。switchでの利用方法を教えて。
俺、malloc(),Free(),エラー(フィルターのようなエラーチェック)以外では使ったことないんだけど。
0007仕様書無しさん
NGNG0008仕様書無しさん
NGNGへ!?switchでのgoto分岐処理?どんなんよ?
0009仕様書無しさん
NGNG毎回switchでテーブルjmpするよりも分岐予測が付く分、高速。
0010仕様書無しさん
NGNGこれからの時代はStateパターンだ!
0011仕様書無しさん
NGNG0012仕様書無しさん
NGNG0013仕様書無しさん
NGNG0014仕様書無しさん
NGNG0015仕様書無しさん
NGNG0016仕様書無しさん
NGNG0017仕様書無しさん
NGNG0018仕様書無しさん
NGNG0019仕様書無しさん
NGNG0020借り物
NGNG0021goto
NGNG0022仕様書無しさん
NGNG荷馬車が goto goto 子牛を乗せてゆく♪
0023仕様書無しさん
NGNG0027仕様書無しさん
NGNGswitchはtokenの解析でたまに使う。
0029仕様書無しさん
NGNGJavaでgoto文を廃止したのにC#では復活させているんだぜ。
某runからやってきたレドモンドの某社のヤシとM$社員は、もうアホかと、
0030仕様書無しさん
NGNG未練たらたらで復活させるかもしれませんが何か?
ttp://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#229308
0031山崎渉
NGNGピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0032仕様書無しさん
NGNG0033山崎 渉
NGNG__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0034山崎 渉
NGNG( ^^ )< ぬるぽ(^^)
0035ぼるじょあ ◆yBEncckFOU
NGNGピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。
=〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
= ◎――――――◎ 山崎渉&ぼるじょあ
0036仕様書無しさん
NGNGこの前エラー処理をgoto文でやれっていう顧客がいて、泣く泣く変更した哀しい記憶を思い出してしまったじゃないか。
0039仕様書無しさん
NGNGリソース取得
リソース使用
-> goto error;
リソース使用
-> goto error;
リソース使用
-> goto error;
return 1;
error:
リソース開放他
return 0;
}
こんな使い方ばかりしてるけどよくない?
0040仕様書無しさん
NGNGその形にはまる場合は良いが、下みたいな形を取りたいときがどうしたらよいかコマタ
func() {
try {
・
・
・
try {
・
・
・
} catch {
・・・
}
} catch {
・・・
}
}
0043仕様書無しさん
NGNGCにもcontinueはある
それを知らないのはお前がアホだから
0044仕様書無しさん
NGNGgoto が最適であると判断される状況は、たまーにある。
0045仕様書無しさん
NGNG0047仕様書無しさん
NGNG0048仕様書無しさん
NGNG0049仕様書無しさん
NGNG経験則なんだけど、goto文使うと契約切られ難くなるんだよね。
0050パチ屋店員
NGNG0051仕様書無しさん
NGNG0052仕様書無しさん
NGNG昔のソースのちょっとした改造で、元が・・だと、どうしても使うときがある。
いいんだよ、どうせ元が元なんだから!
0053仕様書無しさん
NGNG0054仕様書無しさん
NGNG0055仕様書無しさん
NGNG0056仕様書無しさん
NGNG0062プロで無くともプログラマ
NGNG0063仕様書無しさん
NGNG関数なんか作らずgotoを使ってください。
0065プロで無くともプログラマ
NGNG0066仕様書無しさん
NGNG0067仕様書無しさん
NGNGif(...)
break;
...
if(...)
break;
...
}while(0);
0068仕様書無しさん
NGNGじゃあ君は switch 文を使わない主義か。
0069名無し@沢村
NGNGというのはアセンブラ言語にはJMPなどがあって、それを使わないでプログラミングすることはできないからだ。
つまりCでgotoを使っていなくても、マシン語のレベルでは随所に使われているわけだ。
0071仕様書無しさん
NGNGgoto kuroyagi;
kuroyagi: goto siroyagi;
siroyagi: goto kuroyagi;
}
0072名無し@沢村
NGNGというのはアセンブラ言語にはJMPなどがあって、それを使わないでプログラミングすることはできないからだ。
つまりCでgotoを使っていなくても、マシン語のレベルでは随所に使われているわけだ。
0073仕様書無しさん
NGNGgotoを使いたくないのは人間の都合だから
つーかアホか?
0074仕様書無しさん
NGNG思っているようだから、アセンブラなりバイナリダンプ入力なりで
開発をすればよろしい。
0075仕様書無しさん
NGNGLaticeC==マクロアセンブラだし。
0076仕様書無しさん
NGNGって相談された事あったな・・・・mainが数千行
0077仕様書無しさん
NGNG○構造化プログラミングが提唱されたときに現役で、そのあとgotoの利用方法を考えなかったやつ。
○教科書にgotoレスって書いてるからと、なんも考えずにプログラマー名乗ってる馬鹿
上の2つのどれかに該当するやつは、使わない。
0078仕様書無しさん
NGNG○バカ新人がまねして使うとマズイから、極限まで使わない
gotoがあるなら使えばいいというのもわかるが、そうならないようなプログラミングを心がけるべきだし
動けばいいとか思ってるヤツは、手本になる立場になっていないだけだろう。
0079仕様書無しさん
NGNG見通しが悪くるから保守しにくくなる
っていうところなんですか?
0080仕様書無しさん
NGNG馬鹿が使いどころを考えずに使うと、あっちこっちに飛んでわけわからなくなるから。
0081仕様書無しさん
NGNG人間はある程度パターン化して理解してるからね。
for ・ while ・ switch 使ってると そこを考えなくてスラっとパターンとして読めるのに
それらで代替が利く所でgoto使われると、どういう処理かを考えなければいけない人が多いわけ。
ほら、 { 〜 } が begin 〜 end になっただけでダメになる人って多いじゃない?
それと同じで表面層に縛られてる人も多いんだよ。
たぶんキミは begin 〜 end だろうと goto だろうと問題なく理解できる人なんだろうけどね。
そういう人もいることを考えてあげないとさ。
0082後藤
NGNG0083仕様書無しさん
NGNG2.ルールを知っていて大抵、ルールを守る。
またルールを破るべき局面を知っている。
の二種の段階の違いかと。
008579
NGNG諸刃の剣である、といった感じのほうがしっくりくる
という感じに理解しましたがいいですか?
ちなみに私は化学分析屋です。
細かいツールなんかを作ったりする程度の趣味グラマです。
0086仕様書無しさん
NGNG0087うどん ◆udonJ.P/1M
NGNG使うのは問題外だよな?
で、1つ2つを例外的につかっただけで
どうして見通しが悪くなるんだ?
そりゃ技量の問題だろ。というか技量もなにもgotoはキーワードなんだから
使い方知らんのはそれこそ問題外。
0089仕様書無しさん
NGNGじゃ黙ってろよ。
趣味とプロじゃ違いすぎる。諸刃の刃のようなアルゴリズムを作るから
そういうことになる。
0090仕様書無しさん
NGNGジャンプ命令の使い方しかしなくなり、最終的にはマクロを使うようになった。
0092仕様書無しさん
NGNGwhileとforとdo-whileの使い分けをしないやつ。
両方とも大抵しょぼい。
0093仕様書無しさん
NGNGでも指摘済みだけれど、
エラーを同じ関数内でリカバーする使い方は
非常にわかりやすくて良いと思う。
これをif文作ってその中でリカバー、returnなどされると
余計保守が困るというものだ。
下手にブラケットを使うよりも
gotoの定型を定めて使わせたほうがよっぽど建設的だと思うのだが
どうだろうか?
0094仕様書無しさん
NGNG0095仕様書無しさん
NGNGfor(){for(){for(){for(){for(){for(){for(){for(){for(){for(){}}}}}}}}}}
から抜け出すにはついつい使ってしまう。
だってflagとか作って、一回条件に合わなかったら1代入して、
何回も
if(flag==1)break;
書くのめんどいしわかりにくい
0096仕様書無しさん
NGNGfor(x=0,y=0,z=0 ; z<サイズ ; inc(&x,&y,&z))
{
}
とか書くのはダメなのかな
0097仕様書無しさん
NGNGとりあえずいえることは、おまえはプログラム組むな。
0098仕様書無しさん
NGNGジャクソン法とかいう話の延長だったかな。
0100仕様書無しさん
NGNGii: /* 処理 */ goto iiii:
iii: /* 処理 */ goto i:
iiii: /* 処理 */ goto iii:
iiiii: /* 処理 */ goto ii:
これを延々繰り返せば、自分以外はメンテ不能となり、開発費を
一人締めで丸儲け。
0102100
NGNG相当うまくやらないとダメだな。儲けを独り占めに出来ない...。
0106仕様書無しさん
NGNGこんなのはどうですか。
http://www.tw.ioccc.org/years.html#1987
の
hines.c
0107仕様書無しさん
NGNGなぜ普通に
http://www.ioccc.org/years.html
を勧めない?
twって台湾だったっけ?
0110仕様書無しさん
NGNGhttp://www.ioccc.org/1985/lycklama.c
0111仕様書無しさん
NGNG0112仕様書無しさん
NGNGこれは全部関数呼び出しにしろ!
0113仕様書無しさん
NGNGそういう立場が一番プログラミングを楽しめるよね。
・構造化を心がけて、手続・関数化をまず行う。
・その手続内で、単純に if for whie switch が使える所は使う。
・それでもgotoが出て来たら、使ってよし(下手に再設計からやるとバグを入れてしまうからね)
ただし、
1、if for while swith が3重以上ネストするのは設計の失敗の可能性大
2、goto が出るのもやはり設計の失敗
という事をふまえて、そうなったら次の設計では頑張るようにね
0114仕様書無しさん
NGNG例外よりは失敗しにくいのも確かだし。
0115仕様書無しさん
NGNG> gotoよく使うよ!
> 経験則なんだけど、goto文使うと契約切られ難くなるんだよね。
>
そういうせこい技をつかうと相手も気づいて
C/C++/C#の使用を禁止しgoto文使用不可な
Java以外を使わせてくれなくなってしまう。
0116仕様書無しさん
NGNG> >>96
> 最小値は0固定として、
> inc(&x, &y, &z, max_x, max_y, max_z)
> くらいないと困らないか?
>
汚い関数だ、コンストラクタでまとめれば引数の数が減るだろうに。
0117仕様書無しさん
NGNG0118仕様書無しさん
NGNG0119仕様書無しさん
NGNG0120仕様書無しさん
NGNGつーかデスマーチしたくなければ
読めるプログラム書け。
0122仕様書無しさん
NGNGみたいな場面になったら、設計見直すけどね。
多重ループを抜ける以外は。
まぁ、ありえないでしょ、と。
0124仕様書無しさん
NGNG×多重ループ
○多重ネスト
では無いのですか。
またgotoは有限状態遷移を表現する場合にも使いますよ。
構造化プログラミングは万能かも知れないですが、
全ての場合において最適解であるかというと、私は懐疑的です。
これはネタではありません。
0125仕様書無しさん
NGNGバカが多いから。
0126仕様書無しさん
NGNG使えることは使えるが、状態を保持する変数を導入するほうが普通じゃないか?
#変数使う余裕がないほどリソースが限られた環境は別として
0127仕様書無しさん
NGNG0128仕様書無しさん
NGNGほう。try catchってどう実装すんの?(w
0129124
NGNGloopブロックの中に、状態を保持する変数によるswichブロックをいれる書き方ですね。
これは確かにロジックは構造化されていますね。
でもこれを読むのってgotoを使った書き方と同じ事だと思います。
残念ながらあなたの見解は私とは違うようです。
この件については「読んでいる方々の個々の判断に任せる」ことにしたいです。
0130仕様書無しさん
NGNG0131仕様書無しさん
NGNGswitchの前後で一つにまとまるから、状態によらない処理を入れるのが
楽なんだよね。
まぁパフォーマンスが欲しくなったら使うかもしれんけど。
0134仕様書無しさん
NGNG変数とか処理は省略。
switch( hogehoge )
{
case 0: hoge = 0;
・
・
goto label;
case 1: hoge = 1;
・
・
goto label;
・
・
・
label:
hogehoge = hoge;
とかなんとか
break;
}
ラベルの飛び先を関数化すればいいんじゃないかなぁと思ったんだけど
なぜgotoを使うのか考えてみた。 なれなんだろうなぁという結論に。
移植なんかしないだろうけど、gotoがない言語もあることだし関数呼び出し
でまとめようぜと思った2003年の秋。
0135仕様書無しさん
NGNG0136仕様書無しさん
NGNGCに備わっていない制御構文を実装するときに使うのはありだろ。
0137仕様書無しさん
NGNG上から下へと一直線に流れるプログラムこそ美しい。
0138仕様書無しさん
NGNG0140仕様書無しさん
NGNGって言った流れをCも汲んでるから。
0142仕様書無しさん
NGNGなくても作れるのにいちいちmallocを使ってんのか? ダメだのう。
ちなみにオレはmallocを関数内で呼ばなくてもする管理システムを構築したよ。
当然、グローバル変数ではない。C++のクラスがもつ変数っぽい感じかな。
ターゲットによっちゃ重たいから親子関係が深すぎるとまずいが、プレスレ1
くらいでならなとか活用できた。
0144仕様書無しさん
NGNG0145仕様書無しさん
NGNGopen***
malloc()
x = new ***
if(!処理A()) {
free(***)
close***();
delete x
return xxx
if(!処理B()) {
free(***)
close***();
delete x
return xxx
if(!処理C()) {
free(***)
close***();
delete x
return xxx
free(***)
close***();
delete x
return xxx
return ***
}
0147仕様書無しさん
NGNGプロは、処理の見通しのよさやメンテのしやすさを念頭にコードを書くものだよ。
0148仕様書無しさん
NGNGオレはプロになってもう6年以上だが。おまえごときにgotoを使うように
言われるほどヘタレじゃねーよ。
>>143
ここには書ききれねーよ。自分でC++っぽいものを作ってみるか
C++がクラスをどうやって実装してるか調べるかしてくれ。
0149仕様書無しさん
NGNG新しい情報に疎い頭持ってるヤツ
0150仕様書無しさん
NGNG無駄なことやってるなぁ。
0151仕様書無しさん
NGNGってなんでつか?
0152仕様書無しさん
NGNG創作が出来るというのは自分のスタイルを持つ事でもある。
お仕着せのルールを上から下命されてるようじゃまだまだだね。
0153仕様書無しさん
NGNGgotoなんかその存在すっかり忘れてたぜ
JAVAではたまに使いたくなるけどな
0157仕様書無しさん
NGNG0158仕様書無しさん
NGNG1、何度も出てるがエラー処理(例外処理のない言語で)
2、Wizard形式のプログラム作るとき(戻るって言うボタンの処理のため)
0159仕様書無しさん
NGNGいろいろreturnごとに開放処理めんどくせーんだよ
0160仕様書無しさん
NGNGC++もどきなら、使わないほうがましじゃないか?
0161仕様書無しさん
NGNGそれがプレスレ1ですか?
0163仕様書無しさん
NGNGランタイムの無い世界もある。
0164仕様書無しさん
NGNGハァ?
設計がクソだからだ、藻前
0168仕様書無しさん
NGNG一切使うなとは言わないが、ループのためにgotoとラベル使うのはは
やめたほうがいいのではないか?
0169仕様書無しさん
NGNGK&R でも見るがよかろう。
0170仕様書無しさん
NGNGまあ、それで食えるなら、好きなだけ使えばいいんじゃない?
0171仕様書無しさん
NGNGK&R自体デムパだし
0173仕様書無しさん
NGNG0174仕様書無しさん
NGNG#include "gotoless.h"
void function_hoge () {
better_return HOGE;
}
void function_other () {
:HOGE
}
//gotoless.h
#define better_return goto
0175仕様書無しさん
NGNGってこれはスレ違いだ。
これとgotoを同列に論じるな。
0176仕様書無しさん
NGNG0178仕様書無しさん
NGNGだとすると、Cでgotoつかってもいーじゃんよ。
活きているロジックの部分にgoto使うのはヤメレつーだけの話よ、構造化でのgoto縛りは
0179仕様書無しさん
NGNG疑問文
>だとすると、
仮定
>Cでgotoつかってもいーじゃんよ。
確信
【総評】 わけわかりません。
0180仕様書無しさん
NGNG{
if(init1()){
if(init2()){
if(init3()){
return SUCC;
}
exit2();
}
exit1();
}
return FAIL;
}
0181仕様書無しさん
NGNG{
if(!init1())
goto err1;
if(!init2())
goto err2;
if(!init3())
goto err3;
return SUCC;
err3:
exit2();
err2;
exit1();
err1:
return FAIL;
}
0182仕様書無しさん
NGNG{
if(!init1())
return FAIL;
if(!init2()){
exit1();
return FAIL;
}
if(!init3()){
exit2();
exit1();
return FAIL;
}
return SUCC;
}
0183仕様書無しさん
NGNG0185仕様書無しさん
NGNG正常に確保出来ないヒープならポインタがNULLかどうかをフラグ代わりにする事が普通だし
0186183
NGNG作ったこともないヤシにはアホにしか見えないようです。
やっぱそんな気を使うくらいならgotoを使った美しいプログラムを
書くように心がけるべきでしょうか?(笑)
0188仕様書無しさん
NGNGif(!init1())
goto err;
if(!init2())
goto err;
if(!init3())
goto err;
return SUCC;
err:
/* cleanup code */
return ERR;
}
0189仕様書無しさん
NGNGそこまでいったら話は早い
int init(){
if(!init1()) return ERR;
if(!init2()) return ERR;
if(!init3()) return ERR;
return SUCC;
}
main(){
if( init()==ERR )
{
cleanup();
exit( ERR );
}
/* apli code */
cleanup();
exit( SUCC );
}
0190仕様書無しさん
NGNG初期化関数ぐらいならいいけれど。
関数内部で取得した一時リソースの解放は、その関数内部で行った方が安全だと思う。
メモリ、ハンドルリークとかはいやだからね。
0191仕様書無しさん
NGNG0192仕様書無しさん
NGNG0193仕様書無しさん
NGNG個人で開発している小さいプログラムなら、リソース開放を一箇所に
まとめるのは割と有効。
0194仕様書無しさん
NGNG>>193
「リソースの開放を取得関数内でおこなうべき」って点は一致しているの?
ならば「エラー発生の都度リソース開放をおこなってreturnする方法」と
「エラー発生時はgotoを使用して関数内の一箇所でリソース開放をおこなう方法」のどちらが良いかという点が焦点なんだな。
前者を支持。
後者の「煩雑だという理由」は「リソース開放をマクロ化する」という方法で煩雑さを回避できる。
0195仕様書無しさん
NGNG・汎用のマクロで処理できる方法しか使わない
・ものすごいマクロを書いている
0196仕様書無しさん
NGNG0198仕様書無しさん
NGNGファイルの変更を巻き戻したらファイルを閉じて、
テンポラリファイルを削除をしたあと、
通信相手に挨拶をして...
あとなにかあったかなぁ....
0199仕様書無しさん
NGNGそんでもってN88BASICの古いプログラムソースを見ると、GOTOが頻繁に出てきて
思いっきり萎えるんだ。
0200仕様書無しさん
NGNG例外が発生した訳でもなく多重ループから外へ抜け出る為だけに
Exception投げてるソースを見たことあるが、そっちの方が「なんで?」って感じだよ。
Exceptionの意味があまり分かっていないんじゃなかろうかと勘繰ってしまう。
0201仕様書無しさん
NGNGgotoを使いたくないがためにそういう技を使うのは確かに邪道だな。
素直にgoto使ったほうが潔い。
Javaとかだとラベル付きbreakがあるそうだけど、これも本質はgoto
と変わらないのでは?goto否定派の人はコード上の善し悪しでなく、
なんとなく潔癖症的に嫌っている気がするな。
0202仕様書無しさん
NGNG事態に陥ったところがそもそも問題。
0203仕様書無しさん
NGNG昔ながらの現場ではCOBOLの頃からの伝統にのっとり
コードの読み合わせ会が行われます。
そのような現場では、規約にgoto禁止とあると、gotoがあるだけで読み合わせ会が紛糾するので
皆さん規約にない方法で避ける事を考えなければならないわけです。
0204仕様書無しさん
NGNG・終了関数にゴミを渡すとハングするので結局ハンドルなり構造体なりを前もって0fillする手間が増える。
・多くのライブラリリファレンスでは0を渡したときの挙動が明記されていないので呼び出しスタイルの統一を図れない。
・一般的なクラスのコンストラクタ・デストラクタの挙動と異なる。
というわけで183は糞。
0205仕様書無しさん
NGNG,、:'":::::::::::::::::``:...、
/::::::::::::::::::::::::::::::::::::::\
i::::::::::::::::::::::::::::::::::::::::::::::::::ヽ
!::::::::::::::::::::::;‐、:::::::::_::::::_::::';
|::::::::::::::::::::::| :: ̄ ``! なんかもう必死でしょう
r''ヾ'::::::::::/ :: | goto回避潔癖症の人って...
l r‐、\::/ _,,、ii_;;_、 _,,,l、 by 松本人志
ヽヾ〈 ::= -r:;;j_;、`/ :;'ィ;7
!:!_,、 :: ` ー : |: `´/
,./ヽ | 、_ :: ,: 'r' :i |: /
,../ `ヽ;_ i | '"、_:::__`:'‐'. /
/ ``'ー 、_\ ! `::` ̄''`チ`シ
/ー 、_ `\:、_ :: ` ̄/
/ ``ヽ、 ヽ`'7‐--'゛
/ `ヽ、 `/
0206仕様書無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1065974382/l50
脅迫キタ━━━━━━━(゜∀゜)━━━━━━━!!!!!
0207仕様書無しさん
NGNG> ・終了関数にゴミを渡すとハングするので結局ハンドルなり構造体なりを
> 前もって0fillする手間が増える。
C++でもコンストラクタ初期化子は指定すべきです。
ましてコンストラクタのないCなら尚更でしょう。
> ・多くのライブラリリファレンスでは0を渡したときの挙動が明記されていないので
> 呼び出しスタイルの統一を図れない。
0 (-1でもいいんでしょうが) ならば呼ばなければいいんです。
> ・一般的なクラスのコンストラクタ・デストラクタの挙動と異なる。
意味が判りません。
結論: VBでも使ってれば?
0209仕様書無しさん
NGNGおまえは画像処理の多重ループではgotoをずいぶん使っているようだが
そんなことしなくても問題ないニンゲンが沢山いることも知るべきだな。
アセンブラベースのゲーム移植のとき以外、gotoなんぞ使ったことねーぞ。
0210仕様書無しさん
NGNG0212208
NGNG違う違う、画像処理に限らずアルゴリズムによっては多重ループもありえるって事だよ。
202はまるで多重ループになるプログラムはありえないみたいな書き方をしているから
複雑な数学を必要とする画像処理を例に挙げたまで。
俺だってgotoなんて殆ど使ったことねーよ。
0213仕様書無しさん
NGNGそこは別の関数にするべきだ。
負荷優先であっても
外側の関数呼出しは、内側がループである以上、殆ど問題にならない負荷だ。
・gotoは状態遷移型のアルゴリズムを実行遷移で実現する時、アルゴリズム通りに
書く場合は許されると思う。
0214仕様書無しさん
NGNGくらいだったら、ふつーに出てくるよね。3重もたまにはある。4重以上は
使った記憶ない。その2重・3重のループを抜け出すためにループ抜け出し
用のフラグを使ったり、例外発生させたり、あまり必然性ないのに内部の
ループを関数化するよりはgotoで脱出したほうがコードとしては素直だと
思うがどう?
そもそもgotoと、breakやcontinue(ラベル付も含む)って本質的になにか違う
んだったけ?飛び先が自由(無制限)か固定かだけの違いに思えるんだが。
0215仕様書無しさん
NGNG別関数にすることをループが多重だからってことで決めるのは
好きじゃないなぁ。
ループが多重になっている箇所が、読みにくくなっているから、
別関数にする。多重ループでも読みやすければなにもしないぐらいに
して欲しいなぁ。
0216215
NGNGfor (…) { // A
for (…) { // B
for (…) { // C
/* 何らかの処理 */
goto EXIT;
}
}
EXIT:
}
こういう構成の場合、BとCとが組で機能を実現していることが多く、
BとCと比べてAとBの関係は弱い。
BとCを関数化して、returnで処理を抜けるようにする。
こんな感じに内部のループを関数化することはよくやるけど。
飛び先を制限するだけでも、かなり追っかけやすくなると思う。
0217仕様書無しさん
NGNGそこを開発の安定という効率化を追及することでC言語やC++がでてきたわけだ。
C言語でgotoあたりもうまく使わないとパフォーマンスが出ないハードでやってる
ヤツに使うなとは言わんが、C++で作ったものでも十分に問題ない速度で動く環境
ならば、やはりgotoで抜けるのではなく関数化すべきだろう。
gotoに慣れ、関数化するほうが判りにくいというヤツもいるだろうが、物事の本質的
にそれはよろしくないですよ。関数化に慣れろ。
0218仕様書無しさん
NGNG関数化することでそれぞれの関数がパッケージ化していくもんだが
それが面倒、慣れてないとなると容易にスパゲッティ、コピペに流れる。
当然、それしかなかったころからプログラムやってる連中はそんなことな
かったりするわけだが、問題はそんなことじゃない。
そういう連中がポインタもわからんようなやつ目の前にしてgotoは使ってもいい
と発言するのはマズイ。
0219仕様書無しさん
NGNG(1)複数の場所から呼び出す
(2)その部分を関数にしたほうがコードがわかりやすくなる
(3)処理が長い
どれかに該当すれば関数にする可能性が強いけど、どれにも該当しないような
場合、gotoを使いたくないがために無理に関数にするのはどうかと思う。
0221仕様書無しさん
NGNGgotoなしでプログラムを書ける人達が、gotoを使用するべき局面が存在するか/存在するとしたらいかなるところなのか
を話しているんだ。
gotoは有害(である場合が多い)なのは事実だが、有害なのはgotoだけではない。
あなたのレスから判断すると、本当に有害だと思うのは
「ポインタもわからないやつらにプログラムを書かせなきゃならない」
という環境だ。
0222仕様書無しさん
NGNGプログラムを書かせなきゃならない」という環境については?
0224仕様書無しさん
NGNG0225仕様書無しさん
NGNGなどと言って、幼児に包丁持たすようなもんか。
0227仕様書無しさん
NGNG0228仕様書無しさん
NGNGそれ良いね。goto免許制で議論はすべて解決するだろう。
0229仕様書無しさん
NGNG基地外に刃物って言葉を知らないの?
0230仕様書無しさん
NGNG出さなくなって何年って感じな印象を受けるが。
0231仕様書無しさん
NGNG書いているんだがな。
0233仕様書無しさん
NGNG多重ループ脱出とかは許容範囲では。
自分は、ここ数年使ってないが・・・
0234仕様書無しさん
NGNGCのgotoなどカワイイもんで、気にも止めないんだが。
ただ個人的にはCでgoto使う奴は腕が悪いと
教わった人にすりこまれた口なんで
脳みそが使いたがらないけどね。
最初にCプログラムに出会った環境が
良くも悪くも影響しそうですね。
0236仕様書無しさん
NGNG多重ループな処理を無理やりフラグを使って制御して
後藤君を使うよりもわけわからなくなる例を多々見てきた。
また、こういう人達はエラーが発生するとすぐにreturn
したがるのでメモリ開放漏れが多発する。
私しゃ、一定レベルのPGを集められなかった場合には、後藤君で
後処理に飛んで、そこで必ず資源開放を行うことをコーディング規則で
必須にしてる。
char *hoge_area;
hoge_area = NULL;
~~~~~~~~~~~~~
hoge_area = malloc(-----);
if( hogehoge()!=0 ) {
goto end_proc;
}
〜〜〜〜〜〜〜〜〜
end_proc:
if( hoge_area!=null ) {
free(hoge_area);
}
}
0237仕様書無しさん
NGNGmalloc,freeをフレームワーク側で面倒見るようにすれば、そんなものすら
必要なくなるよ。
途中で面倒くさくなって描画用ハンドルはそこに組み込めなかったけど、
開放忘れで苦労したことはほとんどないなぁ。
>>235
まあ、キミがプログラム初めて2〜3年の新人ならgoto使うのは反対とか
言わんがね。世の中のプログラマがキミよりできると君自身が信じている
なら、それは間違いだよ。
0238仕様書無しさん
NGNG0241仕様書無しさん
NGNG0242仕様書無しさん
NGNG意味がわからん。俺はむしろ20代後半からミスが激減しているのだが。
0243仕様書無しさん
NGNGフレームワークでどのような処理するのか教えてケロ。
もしかして、プログラムや機能終了時に制御テーブル内のハンドルを
全部開放する方式?
それだと、メモリを喰いまくるような気がするのだが・・・
そもそもC言語で開発する意味ないような・・・
0244仕様書無しさん
NGNG30前後からまたバグ作り込む様になる、と言いたいのでわ?
# ま、歳だしな:-)
0246仕様書無しさん
NGNGいやもちろん書けるけどどうやってきれいに書く?
0249仕様書無しさん
NGNGそれは、シナリオの部分をデータにしておいて、
それにしたがって遷移していく、という方法だ。
つまり、C言語のgotoを避けるために、
自前の「言語」とその「インタプリター」を作り、
その上でなんでも自由に使いまくる、
という万能goto回避ライブラリの簡略版を作るわけだ。
0251249
NGNGgoto云々とは別に、そういうやつはシナリオが変わることが多いと思うので、
ハードコーディングしないで、シナリオをファイルから読んだりしたほうが、
エンジニアリング上、楽な場合も多いんじゃない?
0252仕様書無しさん
NGNGアプリ側では起動・実行・終了処理関数と、それら関数で使用する構造体のサイズを
フレームワークに登録するようにする。
フレームワークはメモリを確保した上で上記関数群を呼び出す。
アプリはフレームワークを介してアプリプログラムを自由に実行できるようにする。
これだけでmallocからは開放されるかと。メモリ確保できなかった場合は実行されない。
アプリ側でアプリプログラムを実行した場合もいわゆるハンドルを渡す形式にすれば
C++で言うところのNULLポインタでのメソッド呼び出しとかも回避できる。
まあ、C++を使った方がスマートだけどね。Cでもこれくらい用意しておけば、しょーもない
開放忘れとか回避できるよ。
ちなみに30前後でバグ〜うんぬんはオレの実例なだけで、年齢はもしかして
関係ないかもしれない。オレはもう疲れた。
0254仕様書無しさん
NGNG大きさが動的に変わる場合は?
終了関数はいつよばれるの?
0255243
NGNGうぅ〜ん。
どうもイメージがつかめないな。
メモリの確保の専用関数がいて、そいつが関数毎にハンドルを
テーブルに登録。
でもって、関数の抜け出す時に専用関数を呼ぶことによって
その登録したメモリを開放するって機構ですかね?
それだと、いまいち使えないような。
疑問その1)
メモリ確保を下位の関数がして上位関数が使用ってパターンは
多々あると思うのですが、それはどのように対応してますか?
疑問その2)
メモリ以外に共有メモリやセマフォやミューテックスちゃんとかの資源
開放はどうしてるのでせうか。
疑問その3)
そこまで簡略化できたとして、何故にCを使うのか。
JAVAでいいんでないかい?
Cを使う理由は、そういう制御きっちりをしたいから
なんだけど・・・
0256仕様書無しさん
NGNGfor (…) {
for (…) {
if( 条件 ) goto EXIT;
}
}
EXIT:
こういうコードって何で必要になるの?
1、全件検索
2、ループ中のエラー発見による作業中断
他にあるのかな?
1なら、検索処理として自立した関数・手続化するべきだ。
そうすれば検索を2分検索などの手法で効率化するのが容易になる
こういうコードが残っているのは、あきらかな構造化分析ミスだ。
2なら、構造化例外を持っているなら例外を、そうでないなら大域分岐を使うべきだ。
CならLONGJUMPが使える。
0258243
NGNGすまん。
構造化例外やLONGJUMPってANSI規格になるのでしょうか・・・
そもそも、LONGJUMPって何のこと???
16ビット時代のLONGJUMPのこと???
0259仕様書無しさん
NGNG0260仕様書無しさん
NGNGえ? Cなら普通でしょ?
回復不能エラーを発見したら後始末して大域脱出するもんじゃないの?
そこをフラグ作って分岐一杯入れるからバグを作り込んでしまうわけで
0261仕様書無しさん
NGNGスタック巻きもどして途中の関数のデストラクタ呼んでくれるんだっけ?
0263仕様書無しさん
NGNGC なんだからそもそもデストラクタは呼ばれないでしょう。
大域脱出を利用する場合は、
ヒープや後始末が必要なものは setjmpする時に用意した ポインタに
リンクリスト式に処理をぶら下げてゆくのが常道だね。
そして、大域脱出時に、リンクリストを逆戻しに関数を呼び出してlongjmpすると
0264仕様書無しさん
NGNG0265仕様書無しさん
NGNG「後藤君は使っちゃいけない!」
っと馬鹿の一つ覚えのように逝ってる奴は素人ってことだ。
ケースバイケースって言葉を知らないおこちゃま。
0266仕様書無しさん
NGNG使おうが使わまいが、ぶっちゃけどっちでもいい。
ただ、ループの中に飛び込む後藤君を書いてる新人が現れたら
お前は当分、後藤君禁止なと言いたい。
0267仕様書無しさん
NGNG一つだけ開放する関数を用意しておけばそう忘れたりはしないよ。
・・・まあ自分で組む場合だけだけどね。
つまり
void func(void)
{
リソース確保
成功したら AddFreeFunc( 開放関数 , リソース);
でなければ LONGJUMP<- 全部開放してlongjmp
・・・ 処理 ・・・
FreeFunc(); <- 1個だけ開放する
}
てな調子にするわけ
0269268
NGNG> 2、ループ中のエラー発見による作業中断
(略)
> 2なら、構造化例外を持っているなら例外を、そうでないなら大域分岐を使うべきだ。
> CならLONGJUMPが使える。
breakに対しても同じ考え?
0270仕様書無しさん
NGNGbreak も 検索か、エラー発見の場合だと思うけど、
c言語で1重ループの場合は、それは見れば判るという意味で許されると思うよ
pascalなら関数内関数が書けるから、検索なら関数内関数にするべきだと思うけどね。
0271仕様書無しさん
NGNGキミは恵まれた環境にいるようだね。オレがそういうものを作ったのは
ターゲット環境にはアセンブラ/C/C++しか選択肢がないからだよ。
Cでmallocを使うよりJAVAのように開放処理を自動化する方が安全だと
判ってもらえているようだけど、ようは安全だからそのようにしたわけ。
オレ自身はそういうもの作れる程度のレベルを持っていると思われるので
普通にmallocでもgotoでも使ってもいいとおもっているけど、他人はしれ
たものじゃないからな。 何度かしょーもないバグで時間取られたし。
gotoは使うなといってるんじゃない。「使ってもいい」と気軽に言うなと。
「ちゃんと設計を行い、gotoを使うことがもっとも効率がいい場合にのみ使ってもいい」
と毎回言って欲しい。じゃないとバカがすぐ意味不明な使い方するからな。
0272仕様書無しさん
NGNG0273243
NGNGなんか全く逆に思われてるようなのだが・・・
「Cでmallocを使うよりJAVAのように開放処理を自動化する方が安全だと
判ってもらえているようだけど、ようは安全だからそのようにしたわけ。」
私はちょこざいな方法で自動化するぐらいなら、最初から実装
されてる環境を使ったほうがマシといってるだけで・・・
JAVAの自動開放は、大雑把なシステムを作るのにはいいが
シビアなシステムにはクソだと思ってるわけで・・・
Cの環境に、ちょこざいな実装で自動化を持ち込んだら、
それこそGOTO文よりも弊害が多いわけで・・・
後藤君は計算機システムでは当たり前の処理で、弊害を
教えればいいわけで。もし、後藤君がダメならCONTINUE君
も禁止するべきなわけで・・・
そもそも古いBASICのプログラマからCプログラマへの
転向者はもうほとんどいないわけで、心配しないでも
新しい人達は後藤君はほとんど使わないわけで・・・
0274仕様書無しさん
NGNGbreakが複数あるループの直後の処理、
returnが複数あったりする関数のそれぞれの後処理などは
やはり、それなりの慣れと集中力が要求されるわけで・・・
できれば、避けるように指導しているわけで・・・
0275仕様書無しさん
NGNGそういう方法だと関数を抜け出すときに、いかにきれいに専用関数へ処理を
流すかが問題となる気がするが。
0276仕様書無しさん
NGNG0277仕様書無しさん
NGNG制御レペルの{}のそとにでる という意味だろ
0278仕様書無しさん
NGNG多重ループを抜ける場合とは
1、検索
2、エラー発見による作業中断
のどちらかである。
これは真であるか?
0279仕様書無しさん
NGNG0281仕様書無しさん
NGNGという事で
多重ループを抜ける場合とは
1、検索+探索
2、エラー発見による作業中断
でよろしいですか?
0283仕様書無しさん
NGNGエラーを発見しない時に中断ってどういうふうに使うの?
0284280
NGNG通信とかで、こんな感じのことをする。
1) コマンドを送る
2) レスポンスを待つ
3) レスポンスがなければ、再度コマンドを送る
4) N回送っても、レスポンスがなければあきらめる
エラーを発見した(レスポンスがない)場合はループを抜けず
頭のコマンドを送るところに戻る。
エラーを発見しない場合は再送しないためループを抜ける。
あきらめた後、一定時間待ってから再度1)〜4)をやってみる
というのを簡単に組もうとすると多重ループを使う。
稀な話だし、他の組み方をすることも多いけど。
retryを例外処理にもつ言語だともっときれいに組めるんだと思う。
gotoで頭に戻してっていうのはあまりやりたくない。
0285仕様書無しさん
NGNGfor(j=0;j<REPTIME;j++){
for(i=0;i<N;i++)
{ SendCmd(SendBuf);
if( GetCmd(RecvBuf) ) {
成功した場合
return;
}
}
Sleep(WaitTime);
};
この後、どうやっても動かない場合を書く
・・・・・・・
まあ、仕様書にこういうフローを書いてあったらその通り書くにはいいかもしれないね。
0286仕様書無しさん
NGNGうん
そんな作り方はしない
0287280
NGNG0288仕様書無しさん
NGNGfor(i = 0; i < MAX; i++){
if(条件B){
/* C */
}
}
}
/* D */
の様な場合、CからDまで抜けたいときにはbreak使う? goto使う?
おれは意気地なしなのでgoto使うけど。
0289仕様書無しさん
NGNG0290仕様書無しさん
NGNG0291仕様書無しさん
NGNG0292仕様書無しさん
NGNG0295仕様書無しさん
NGNGループの後処理が追加される可能性が高くて、
Cから抜けたときも実行したいことが多いと思う。
そんな場合なら、break;
でも、条件Aと同等の意味が条件Bにあるのなら、
ループの後処理はないと思うので「CからDまで抜けたいときには」
(ループに副作用がある場合、Cでキャンセル処理して)、
素直にgotoで抜ける。この場合、D以後でiは使わない。
と、オイラならする。
0296仕様書無しさん
NGNGCならgoto使いまくりじゃん。↓みたいに。
unsigned char *a=NULL,*b=NULL,*c=NULL;
if((a=malloc())==NULL) goto done;
if((b=malloc())==NULL) goto done;
if((c=malloc())==NULL) goto done;
hogehoge_operation;
done:
if(a) free(a);
if(b) free(b);
if(c) free(c);
C++やJavaならtry,catchやデストラクタ使えるけど、
Cじゃgoto使うのもしょうがないっしょ(;´Д`)
0297仕様書無しさん
NGNG0298仕様書無しさん
NGNGOSにゼロを返さないといけないのでつか?
OSが誤動作するのでつか?
void mainでreturn 0とならない最近のCコンパイラをいえますか?
0300仕様書無しさん
NGNGよく覚えて無いけどVCはゴミを返してたと思う。
>OSにゼロを返さないといけないのでつか?
は、確かにどうでもいい気がする。が、
>OSが誤動作するのでつか?
そういう問題じゃなくて、このプロセスの戻り値を見る人が困るか
どうかが問題だと思う。なに返すかわかんないプロセスの戻り値
を見ることは無いから問題無いと思うけど。
0301仕様書無しさん
NGNG0302仕様書無しさん
NGNG> OSが誤動作するのでつか?
OS ではなく、そのプロセスを作って waitpid() してる側が困るだけやね。make とかで
呼び出す時に、エラーと判定されて実行止まるとか。
0303仕様書無しさん
NGNG0304仕様書無しさん
NGNG0305仕様書無しさん
NGNGif(条件A){
for(i = 0; i < MAX; i++){
if(条件B){
/* C */
break;
}
}
if (i >= MAX)
break;
}
/* D */
0306仕様書無しさん
NGNGtypedef {ok ; unsigned char *a, *b, *c} hage;
hage foo = MyAlloc(void); <-メンバーを作成する
if (foo.ok)
{ 処理 ;
MyFree(&foo);
}
0308仕様書無しさん
NGNG使ってる奴はアホだわな。
0309仕様書無しさん
NGNG>>OSにゼロを返さないといけないのでつか?
>は、確かにどうでもいい気がする。が、
よくねぇよ、アホ!
おまえはいいかもしれないが、そのアプリを使う奴がいいとは限らないんじゃ、ボケ!
>>299
>俺はむしろmainの後の()が空なのが嫌いだ。
おまえも逝ってよし。後ろの()は空でも全く問題なし。
そして>>293は死ね。
0312仕様書無しさん
NGNG0313仕様書無しさん
NGNGそのアプリを使う人は仕様ぐらい知ってるだろう。
0314仕様書無しさん
NGNG電源ONで飛び込んで来る。
ステートマシンを組むときにはgoto文も頻繁に使う。
0315仕様書無しさん
NGNGそんなことする香具師は対症療法を治療だと思う愚者。
つまりポインタをNULLに初期化しておいて、mallocしないでfreeしてしまうという
しょうもないバグへの対処としか思えない。
原因はおそらくgotoの誤用だろうが。
0316仕様書無しさん
NGNGそんなことする香具師は対症療法を治療だと思う愚者。
つまりポインタをNULLに初期化しておいて、mallocしないでfreeしてしまうという
しょうもないバグへの対処としか思えない。
原因はおそらくgotoの誤用だろうが。
0317仕様書無しさん
NGNG1ファイル内での分岐処理はgotoしかないので、それはそれでかっこいいぞ。
行ラベルを関数名だと思って眺めると、
引数や括弧がないので見た目すっきりしてかっこいい。
0318仕様書無しさん
NGNGそれなりのツールって何行ぐらい?
0319仕様書無しさん
NGNGMSDE用の最低限のエンタープライズマネージャもどきで、
メインファイル1個と部品ファイル5個。
一番長いのは110行ぐらいで、行ラベルは12個。
0320仕様書無しさん
NGNG0321仕様書無しさん
NGNGそりゃコンパイラが文句言わないだけだろ。組み込みだろうが
なんだろうが、void main()なんて書いてる奴はアホ。
0324仕様書無しさん
NGNGコンパイラが文句言わなければ何でもOKというあたりに、お前のとこの
職場のレベルが現れてるな(笑)。ま、お前みたいな低能が社員じゃ仕方
ないな。
0325仕様書無しさん
NGNG必要はないけど、そうしておけば 後でスパゲッティを解きほぐす人の小さな助けにはなるね。
自前のCRTで立ち上げたらどこからスタートするかで何日も悩む事になるからさ。
0327仕様書無しさん
NGNGプ。ANSI準拠のコードすら書けない低能PG必死だなw
ま、一番腐ってるのはお前の脳みそだけどな(爆笑)。
0329仕様書無しさん
NGNGそりゃ、そんなものしか上げれないほうが悪い。
一人で趣味でやってるのなら別にかまわないが。
0330仕様書無しさん
NGNG0331326
NGNG0333仕様書無しさん
NGNGそんなマヌケな環境、想像出来る方がどうかしてるだろ。
まったく馬鹿はこれだからな。
>>331
はいはい。反論できないのなら出てこなくて良いですよ。
君の低能は確定してるんだからね(爆笑)。
0335仕様書無しさん
NGNG0337仕様書無しさん
NGNG「あ〜、なんか、今日はreturn 0;とか書きたくねぇな〜〜〜。腕がだりーし。
ま、イイか。void main() {っと。。。」
0338仕様書無しさん
NGNG0339仕様書無しさん
NGNGそんなに神経質になるな。
0340仕様書無しさん
NGNGvoid main()は別にかまわないけど
ステートマシンの場合は
ちゃんと状態遷移図と遷移表をつくって
goto使わないようにしろよ
0341仕様書無しさん
NGNGしょぼ、return 0;なんて打つのに1秒もかからんだろ・・・
0342仕様書無しさん
NGNGこれまたゴミプログラムを作るとき…
「あ〜〜、このプログラムすぐ出来ると思ったのに意外と手間取っちゃったよ、めんどくせ〜〜
というか、適当に作ってたらループが7重くらいになってるんだが、最深部から一気に抜けないと
いけないことに今気づいたんだよ。 脱出フラグつけるのも( ゚Д゚)マンドクセーし。。。
まぁ、goto loop_end;っと。んでloop_end:っと。おわりっ」
0343仕様書無しさん
NGNG>>299=>>300だったりする。なんかすごい勢いで叩かれててドキドキするなあ。
>おまえはいいかもしれないが、そのアプリを使う奴がいいとは限らないんじゃ、ボケ!
>>299をちゃんと読んで。
>>俺はむしろmainの後の()が空なのが嫌いだ。
>おまえも逝ってよし。後ろの()は空でも全く問題なし。
問題ないのは知ってる。引数無いときにvoidって書かないのが「嫌い」なだけ。
好き嫌いぐらい人の勝手だろ。
0344仕様書無しさん
NGNGそんなあなたに、C++
int main() で、returnいらず。
>>339
天然のアホ?
それを突き詰めれば、CもC++も、ありとあらゆるものを否定しまくりじゃないか。
0345仕様書無しさん
NGNG> 問題ないのは知ってる。引数無いときにvoidって書かないのが「嫌い」なだけ。
あ、俺も。でもC++のデストラクタにはvoidを書かない主義。
>344
> int main() で、returnいらず。
warningがでるんで、やっぱりうっとうしい罠。
0346仕様書無しさん
NGNGきっと CRTをカソードレイチューブの事だと思ったんだよ。
で、ここで切ったと。
自前のCRTで立ち ⇔上げたらどこからスタートするかで何日も悩む事になるからさ
あれ? 意味通らないや・・・・ 不思議だね。
0347仕様書無しさん
NGNGそこでwarning出すコンパイラが悪い。
0348仕様書無しさん
NGNG0349仕様書無しさん
NGNGmainで 必ず0を返す のと 不定を返すんじゃそんな差は無いと思ってたが
異常終了した時に自動的にエラーコードが入るという意味で差があるんだね。
0350仕様書無しさん
NGNGOSによる。
0351仕様書無しさん
NGNG異常終了は exit(コード) か abort(void) で終わるって事だろうから OSによるって事はないだろ
abort は 確か exit(3) だったっけ?
0352仕様書無しさん
NGNG>> int main() で、returnいらず。
>warningがでるんで、やっぱりうっとうしい罠。
本当に? C++の正しい仕様なのにwarningでる?
そんなコンパイラは捨て。
0355仕様書無しさん
NGNG0356仕様書無しさん
NGNGWINDOWSのことしか考えられないやつらや
UNIXとWINDOWSのことだと思ってるやつらが
いっぱいいるのはどーしてなの
0357仕様書無しさん
NGNG0361仕様書無しさん
NGNGUnixでもWindowsでも組込みでもな。それにしても356は馬鹿
丸出しだな。
0362仕様書無しさん
NGNG0364仕様書無しさん
NGNG0365仕様書無しさん
NGNGそれでは、うちで作ったOSは困る
32バイトのデータを返してもらわんと困るんじゃ
0366仕様書無しさん
NGNGいずれにせよ、OSが面倒見るべき問題だな。
0370仕様書無しさん
NGNG間違いは2箇所でいいかな。
0371仕様書無しさん
NGNG気づきそうなものだが。
0374仕様書無しさん
NGNG非標準な環境では、標準を意識せざるを得ない。
ま、ANSI標準を踏まえた上で「俺はANSI以外も知ってるんだぜ」と言いたいだけ
なんだろうが、あまりにしつこいとウザイ。
0375仕様書無しさん
NGNGこれからは void main() ではなく vois Main()と書く事にするよ。 それで満足か?
0379仕様書無しさん
NGNG普通はvoid main()がおかしいとは気づきませんね。
0380仕様書無しさん
NGNG0382仕様書無しさん
NGNGレジスタ1個なら $func で 引数2個か引数voidだと _funcとか
0383仕様書無しさん
NGNGこの業界では常識。
それを知らないで標準とか抜かしている奴には
無知の無知という言葉を送ろう。
0384仕様書無しさん
NGNGつまらん。
0385仕様書無しさん
NGNG0386仕様書無しさん
NGNG0389仕様書無しさん
NGNG組み込みはvoidだとか唐突に言われてもどうかと(w
それがどうしたんだよ、おまえら。
0390仕様書無しさん
NGNGCでgotoスレじゃなかったのか?
0392仕様書無しさん
NGNG0393仕様書無しさん
NGNG0394仕様書無しさん
NGNG0395仕様書無しさん
NGNG0396仕様書無しさん
NGNGただ、タイミングの関係や、定石として、gotoを使う処理は存在する。
0397仕様書無しさん
NGNG古い定石は良くないとされ、新しい定石が生まれていくし、
定石は背景となるルールによって変化する。
定跡は、最善でないかもしれないけれど、
実績があり、安定した結果を保障するものという意味合いが強いか
goto は廃れてはいない。 今VB開発だが
On Error Goto xx はGotoだ
これでエラー内容をログにも画面にも出してないヤツが居て、
処理も正常終了させてて、
「なんでここの値変わらないんだろう」という致命傷が残ってたりして・・(#゚Д゚)<○永!
0398397
NGNG用は使い方
・飛び先が混乱しないようにすること
・飛び先を限定すること
・上に跳ばないこと
なんかかな
0399仕様書無しさん
NGNG0400仕様書無しさん
NGNG書いて平気な奴は馬鹿。OSがいようがいまいが関係ない。標準化された
C言語でint main以外はありえない。
「組込ではvoid mainは普通に使う」なんて言ってる奴は、まさに低能。
方言はどこまで行っても方言でしかない。だいたい組込でもint main
なところなんていっぱいあるし。組込屋って、やっぱり馬鹿が多いな。
そこでしか通用しない環境に埋没してるCOBOLerみたいだね。
0401仕様書無しさん
NGNGええと、 という事はあなたは WindowsGUI アプリを作る時にも >>386 ですか? ご立派な人なんですね。
ご立派な人だから、また話題をスレ違いにひっぱろうというわけですね。
0402仕様書無しさん
NGNGmainなんて使うか?
0404仕様書無しさん
NGNG0405仕様書無しさん
NGNG0406仕様書無しさん
NGNG0407仕様書無しさん
NGNG今時 C コンパイラが使われるのは 組み込みか UNIXかだ。
unixでは int を返せばいいし 組み込みでは 使う道具に応じて処理すればいいだけの事
0408仕様書無しさん
NGNG確かにmalloc/free同期とれんヤシが後藤つかってたな。
検索KeyにAとBの値(例えば、A=身長、B=体重)を足して使えって、
言われたら本当に足し算しやがった。
0409仕様書無しさん
NGNG0410仕様書無しさん
NGNG”C言語”の始まるところ、すなわちmain関数に
相当する物が三つぐらいあるよ。
0411仕様書無しさん
NGNG0412仕様書無しさん
NGNGそうすると、判り難くなるでしょ? アセンブラ見て判る人は意外に少ないからね。
だからわざわざ main にしてるんだよ。
0413仕様書無しさん
NGNG0415仕様書無しさん
NGNG0416仕様書無しさん
NGNG11.12:
main()をvoidとして宣言して「mainの戻り値がない」という目障りな メッセージを消すことができるか。
A:
できない。main()はintを戻り値とし、(適切な型の)0個か2個の引数 を持つと定義しなければならない。
exit()を呼んでもまだ警告が出る のであれば、冗長であるがreturn文を挿入するしかない
(あるいは使える環境にいるのであれば「ここには届かないよ:NOTREACHED」命令 を使う)。
References:
ANSI Sec. 2.1.2.2.1, Sec. F.5.1; ISO Sec. 5.1.2.2.1, Sec. G.5.1; H&S Sec. 20.1 p. 416; CT&P Sec. 3.10 pp. 50-51.
--------------------------------------------------------------------------------
11.14:
void main()と宣言してうまくいかないわけがないと思う。なぜなら main()から戻る代わりに、
exit()を呼んでいるから。だいたい今使っ ているO/Sはプログラムのexit値/戻り値を無視する。
A:
main()から戻ってくるかどうかは関係ないし、そのステータスを見る かどうかも関係ない。
問題はmain()の宣言がおかしいと、呼び出し側 (実行時のスタートアップのコード)が
main()を正しく呼び出すことす らできないかもしれないことにある。
君が使っているO/Sは終了時のステータスを無視して、void main()で もうまく動くかもしれない。
しかし、このやりかたは移植性が低いし、 正しくもない。
0417仕様書無しさん
NGNG僕がいつも使っている『ほんとおの馬鹿向けのC』には、いつもvoid main()と書いてる。
A:
たぶんその本の著者は自分も対象読者の一人に数えているのだろう。
不思議なことに、例題のコードでvoid main()と書いてる本は多い。 そういう本は間違っている。
--------------------------------------------------------------------------------
11.16:
exit(status)の値は、main()からの戻り値statusと本当に等しいのか。
A:
等しいときもあるし違うこともある。規格は等しいといってる。
ただ し、規格に従っていないいくつかの古いシステムの上では何かしら問 題がある。
また、mainにローカルなデータが、後片付けで必要な場合 はうまく動くことは期待できない。質問16.4を参照。
最後に、 main()を再帰的に起動する場合は上の二つは明らかに同じものではな い。)
References:
K&R2 Sec. 7.6 pp. 163-4; ANSI Sec. 2.1.2.2.3; ISO Sec. 5.1.2.2.3.
0419仕様書無しさん
NGNG0421仕様書無しさん
NGNG0422仕様書無しさん
NGNGこれからはUNIX/LINUX系でもC を使う場面は少なくなるだろう。
Cが残るのは DLL/ドライバのように main を書かないシステムか、main
が帰らない組み込みのみ。
0423仕様書無しさん
NGNG0425仕様書無しさん
NGNGC の移植性は 関数単位・ファイル単位に確保すれば十分で、
アプリケーションレベルでそんなもの期待した事ないからなあ。
0426仕様書無しさん
NGNG0427仕様書無しさん
NGNGvoid main()と書いてる馬鹿、必死だなw
C言語の話なのに、スタートアップコードの話に
すり替えようとすんなよ。お馬鹿。組込屋って、
ほんと421みたいな知障が多いな。COBOLerに
よく似てる(爆笑)。
0428仕様書無しさん
NGNGC使いとCOBOLerには明らかな共通項があるよな。
今のやり方(他の人にとっては古臭いやり方)への固執。
新しいやり方の拒絶。
これってつまり、今のやり方に辿り着くのにそれなりに苦労しちゃって、
やっとある程度になったのにまた振り出しに戻るのが怖いだけでしょ?
達人プログラマと不思議の国のアリスでも読んで考えて欲しいよね。
0429仕様書無しさん
NGNG0430仕様書無しさん
NGNG大変だな。
0431仕様書無しさん
NGNGで? ご自分は組込以外のC言語使いだとおっしゃりたいわけ?
具体的にC言語でどういうお仕事をなさってるんですか?
専門学校で教えてらっしゃる教師でしたら納得しますけどね。
0432仕様書無しさん
NGNG書く場合はint main(char argc, char **argv)で宣言されているからそうしましょうねと。
mainを自分で宣言する場合は好きなようにしましょうねと。
こんな幼稚な話題バカらしいので終了。
0433仕様書無しさん
NGNG0434仕様書無しさん
NGNGそれはかなり不正確だと思うが。
0435仕様書無しさん
NGNGint main(char argc, char *argv[])
だろ
0436仕様書無しさん
NGNG0439仕様書無しさん
NGNG初心者は、**argvなどと2重ポインタを見ただけで引いてしまい、難解な印象をもってしまうだろう。
それ以上読む気をなくしてしまい、たとえば、コードレビューや、ソフトウェア自身の機能追加時の
足手まといとなってしまう恐れがある。
*argv[]なら、char *型の配列であることが一目で分かるため、分かりやすい。
保守性という観点から見ても好ましいだろう。
0440仕様書無しさん
NGNG0445仕様書無しさん
NGNGgoto hell;
0446仕様書無しさん
NGNGapache_1.1.3/htdigest.c(111): void main(int argc, char *argv[])
apache_1.1.3/rotatelogs.c(19): void main(int argc,char **argv)
0447仕様書無しさん
NGNG具体的になればなるほど int main 派はボロを出してくれますな。
char argc がネタでなく書けるという事は、 >>443 が偽装C使いという事でファイナルアンサー。
0448仕様書無しさん
NGNGstr* argv
0450435
NGNG(中途半端なネタだったな。。。(´Д⊂)
0451仕様書無しさん
NGNG0452仕様書無しさん
NGNGANSI金科玉条主義のようでいて、ANSI 知らないとか、実際のアプリなんて書いた事あるのか? レベルの奴ばかり。
それでいて、ANSI準拠じゃないとわめくだけ喚く。 今時 C 使うのなんて組み込みかドライバしかあるまいに。
じゃ C で何書いてるの? と聞いたら ApacheがC言語で書かれていますよ・・・だとさ。
Apacheのソースなんて覗いた事もないのがミエミエ。
今からでもApacheのソース見てごらんよ。 ほら、ANSI準拠の int main はどこにあるんだ?
しまいには char agrc だとさ。 最初はお笑いネタかと思ったがマジですか。 まあそっちの方がオモシレぇけどな。
0454仕様書無しさん
NGNG1発でまわりに嫌われますよ。
今やってる人。まわりはハイハイとすましてくれるでしょうけど、目をよくみてみましょう。どんな目ですか?
まあやりたいなら2チャンネルでやりなさい。
でも、あんまりしつこいと こうやってみんなにネタ引っ張られてハジかきますよ。
まあ、これをハジとも思わない人なら大物になれる素養がありますね。実社会でもどんどんやってください。
0455仕様書無しさん
NGNG0456仕様書無しさん
NGNG0458仕様書無しさん
NGNGカジキマグロか
0459仕様書無しさん
NGNGあと例外の変わりに使うくらいかな?
0461仕様書無しさん
NGNG0462仕様書無しさん
NGNGそういう人はarray[i]=i++;と書くのもきっと気にしないのだろう。
自分の環境で、自分の思ったとおりに動いたらそれでいいんだろう。
そしてそれを注意してくれたやさしい人に向かって汚い言葉を浴びせ掛けるのだろう。
まあ、これをハジとも思わない人なら大物になれる素養がありますね。実社会でもどんどんやってください。
0466仕様書無しさん
NGNG自分に都合のいい情報操作の仕方の見本ですね。
0467仕様書無しさん
NGNG何を言ってるの?
ANSI の話で どうして array[i] = i++ なんてのが出てくるんだ?
その結果は ANSIで決まったとでも言いたいのか?
しかし配列に連番を入れたいのなら 普通 for(i=0 ; i<n ; i++) array[i] = i; でしょ。
それは ANSIに関係なく C なら普通にそう書くものだよ。
0469仕様書無しさん
NGNG同様にvoid mainでちゃんと動くかどうかはANSIで未定義だ。
>普通 for(i=0 ; i<n ; i++) array[i] = i; でしょ。
あんたにとって普通かどうか知らない。
それになそんなこといったらそもそもmain関数の戻り値は普通はintにするもんなんだよ。
もしarray[i] = i++と書いてる奴が同僚に居たらどうする?注意できないよな。
もし言うとしたらなんていって納得させる?
ANSIで未定義だから、という理由は使えないな。そう言ったら嫌われるんだろ?
そいつはこういうだろう。「俺の環境で動いてるんだから、いちいち文句いうな」ってな。
コンパイラ変えただけで発生する可能性のあるバグが潜んでしまうがそれでいいのか?
0470仕様書無しさん
NGNGC厨って頭悪いね
0471仕様書無しさん
NGNG0472仕様書無しさん
NGNGそこに ANSIを出すから回りに嫌われるんだよ。
array[i]=i++;を注意するのや、 移植性の問題を出すのに ANSI の話をする必要はない。
ANSIではなくて、 単に Cならそうじゃないでいいんだよ。
今となってはANSIはC の方言の一つにすぎない。
ANSIも C99という方言を生み出してるじゃないか。
0473仕様書無しさん
NGNG0475仕様書無しさん
NGNGふむ、そういう奴が多い職場があることは十分に考慮する必要を認識させてくれてありがとう。
0478仕様書無しさん
NGNG0479仕様書無しさん
NGNG0480仕様書無しさん
NGNG0482仕様書無しさん
NGNG>コンパイラ変えただけで発生する可能性のあるバグが潜んでしまうがそれでいいのか?
そのとおりだな。それを言った上で
だからちゃんと2ステートで書けと言う。
他者が見たときに身内に近い存在のヤツの技量が疑われるのは悲しいからな
0483仕様書無しさん
NGNG0484仕様書無しさん
NGNG0485仕様書無しさん
NGNGそんなコンパイラ使う奴が馬鹿でしょ。
0486仕様書無しさん
NGNGC言語仕様の中には未定義動作とされているものもあって、
そこはコンパイラによってどういうコードを吐くか決めちゃっていい、
って部分があるんだよ。
なるべくそういう部分に引っかからないようにしようねってことだよ。
だからコンパイラがバカなわけじゃないんだ。
0488仕様書無しさん
NGNGとするとAのコンパイラからBのコンバイラに変えたときにバグが出たとき、
いったいドッチのコンパイラに非があることになるのだろう?
0489仕様書無しさん
NGNG0491仕様書無しさん
NGNG0494仕様書無しさん
NGNG0495仕様書無しさん
NGNG>void main() → 全く問題なし
とか言い出すからこんなことになるんだ。
組み込みなど特殊な環境では問題ないとしよう。
だとしても、なんでこいつは特殊な環境の話に限定してんの?
そりゃ当然つっこむだろ。
なのにこいつはその後、組み込みではうんたらかんたら言い出してるし。
組み込みではうんたらかんたら言うのは嫌われる条件に入んないのか?
ANSIならうんたらかんたら言うのとナニが違うんだよ。
0496仕様書無しさん
NGNG終わった話をまたムシ返すのも嫌われると思うが・・・・
まあ、それはいいとして、キミが相手してるのは一人じゃない。
少なくとも俺は >>293 ではない。
でも、void mainで 全く問題無いというのは同意するよ。
実際、 UNUXでもWinコンソールアプリでも、return を書かなくても exit を書けばいい。
そして、それらのコンパイラで void として問題が発生した経験が無いからね。
え?もしかして俺の知らないコンパイラで動かない可能性がある?
それは、狼少年みたいなもんだ。現実に来たためしがない。
符号付整数が 2の補数じゃないマシンがありえるからというの同じ程度にね。
それよりは実際問題として、ポインタ幅やint 幅の差で苦労する方が余程大きいだろう。
組込みの話は、 今時 C コンパイラを仕事で使うのは組込み関係だけだ。
他に UNIX系が少しある程度。 だから、Cスレで組込みの話が出るのは マ板なら当然だろう。
0497仕様書無しさん
NGNG0499仕様書無しさん
NGNGもうダメな奴の典型ですね
0500仕様書無しさん
NGNGはは、自分だって コンソールアプリ書く時は一応 int main だよ。
でも、 void main や int WinMain は それより沢山書く機会があるというだけさ。
0501仕様書無しさん
NGNG0502仕様書無しさん
NGNG>問題はmain()の宣言がおかしいと、呼び出し側 (実行時のスタートアップのコード)が
>main()を正しく呼び出すことす らできないかもしれないことにある。
とかあるけど、本当にこういう例ってあるの?
もしくは、可能性として考えるとして、どういうケースが考えられるんだろう?
0505仕様書無しさん
NGNG「これは、この環境ではうまく動くから大丈夫です。完璧に調べました」
と薀蓄をたれるタイプだな。
0506仕様書無しさん
NGNGたとえば、帰り値の型を 構造型にして呼び出した場合は問題が起きるだろう
たとえば引数並びを>>43のように2間違った場合には問題が起きる事もあるだろう
たとえば、レジスタを持たないマシンが存在するなら(全てメモリで計算する)
帰り値 int の為にスタックを確保されていて、スタックミスマッチが起きる場合もあるだろうが
それは実験室の中だけだろうね。
0507仕様書無しさん
NGNG環境に依存したコードを書かないといけない場合もあるだろうが、それはなるべく最小限に抑えること。
これは意味不明なバグに遭遇しないための良い方針だ。
0508仕様書無しさん
NGNG原始人の集うスレはここですか。
0509仕様書無しさん
NGNGいえいえ、 自分が書く時は コンソールアプリなら int main
もし void main と書いてあれば指摘されたら直しますよ。
でも人が void main とあっても 問題ないなら指摘しないですね。
0510仕様書無しさん
NGNG馬鹿な部下と共にデスマを越し、アホな顧客と共に仕様変更を歌おう。
どんなに恐ろしいコンパイラを使っても、沢山の可哀相な環境を操っても、
人は標準から離れて生きてはいけないのよ!!
0515仕様書無しさん
NGNG0516仕様書無しさん
NGNG引数3つのシステムとか 漢字コードの差とかさ、
普通、main はそういう システムの差を吸収するためのコードを書くとこじゃないの?
0518仕様書無しさん
NGNGメリットは コンソールアプリなら exitで終了する事を明確にする事かな
組み込みなら、 CRT の関係と名前の変形のせいで vod main しか書けない場合もあるしね
0519仕様書無しさん
NGNGマジで明確になっているとおもっているのかよ。分かるかアホ。そんなことはコメント等で書くものだ
0520仕様書無しさん
NGNG0521仕様書無しさん
NGNG0523仕様書無しさん
NGNGint main でも return 文が無かったり
void main だったり けっこう節操ないね。
0524仕様書無しさん
NGNG(1) mainの中から抜けない(例えばコンシューマーゲーム)
(2) 抜けるときはexit等
(3) mainが戻り値を返しても環境が受け取らない
のどれかだろう。他にもあるかな?
ともかく、OS等が戻り値を受け取るのに返さないのは悪。
こういった条件を無視して、一律に語るのは厨房。
0526仕様書無しさん
NGNG名前は同じだけど、全然別物でしょ。
0529仕様書無しさん
NGNG0531仕様書無しさん
NGNGただし独り立ち(freestanding)な処理系ではそれは適用されない。
一緒くたに議論する馬鹿が多すぎ。もうやめろクソども。
0532仕様書無しさん
NGNG0533仕様書無しさん
NGNG128個以上の引数は書いては行けないと言う諸刃の剣。
あまり素人にはお勧めできない。
0534仕様書無しさん
NGNG0535仕様書無しさん
NGNGvoid main() を仕様外にしてしまったANSIの規格って、ちょっとセンスない。
main()を特別扱いしすぎでは?所詮関数なのだから、好きなように宣言すれば
よいでしょ?値を戻したくなければvoidにすればいいし。
OSから(組み込みでは電源ONで)最初にmain()が呼ばれるのは、言語仕様と
いうよりも、リンカによってあらかじめ用意してあるスタートアップがそれ
を呼ぶからで、それはリンカやOSの問題であって、コンパイラの立場では
そんなの知ったことかと。
0536仕様書無しさん
NGNG0537仕様書無しさん
NGNGint a[10000];
} main(){
}
0538仕様書無しさん
NGNGそうでなければANSIに従う。
そうでなければただのバカ。
0539仕様書無しさん
NGNGBASICでgoto 行番号なんて書いてたのは今思うと狂気の沙汰だと感じる。再利用性なんて考えたことも無かったあの頃。
今更goto使うところなんて無いんじゃない?エラー処理もtry〜catchやdo〜break〜while(false)で代用できるし。
0540仕様書無しさん
NGNG一応スレタイはCで、ということになってる
>do〜break〜while(false)
俺にしてみればこんな書き方をgotoの代わりに使う奴はクソ
0541仕様書無しさん
NGNGむかし、構造化プログラム万歳な奴がプロジェクトリーダやってて、
do-break-while(false)を半強制してたのを思い出した。
本人は「本当は使ってはいけない」とか言ってたが、その下についた
奴らは無批判で受け入れてたな。
0542仕様書無しさん
NGNGどんな書き方だろうが
プロジェクト全体で、同じスタイルが貫かれていれば読みやすいのは間違いない。
0543仕様書無しさん
NGNG0544仕様書無しさん
NGNGそのプロジェクトに入ったら、そのプロジェクトにあわせなくちゃね。
絶対的な基準があるわけじゃないのに クソ とかいうのは如何なものかと
0545仕様書無しさん
NGNG方言にすぎない。方言をベースにC言語を語る組込系の使えない低能
PGは氏ね。
0546仕様書無しさん
NGNGまだいるよ・・・・だからさ、キミはC言語で何作ってるのよ?
それ書いてくれないと可哀想な人にしか見えないぞ。
0547仕様書無しさん
NGNG絶対的な基準でダメダメだろ。
0549仕様書無しさん
NGNG0551仕様書無しさん
NGNG0553仕様書無しさん
NGNGこのスレではあなたがそれを言ったのは初めてのようですね。
どっかから電波受信しましたか?
XはYで代用出来る と YはXの代用の為に作られたは同値ではありませんよ。
0555仕様書無しさん
NGNGgotoをwhileの代用で使うのと同じくらい勘違いしていると思われ。
0556仕様書無しさん
NGNGラベル名を工夫すれば、なぜそれを使ったのかも明らかに出来る。
ゆえに、do 〜 break; 〜 while(false);はクソ
そんなのをプロジェクトのルールにするな。
他のプロジェクトで使おうとするバカが量産されて迷惑なんだよ!
使うならこのプロジェクトのローカルルールだということを徹底させろ!
0558仕様書無しさん
NGNGswitch(0){
default:
〜
break;
〜
}
ではいけないの?
0561仕様書無しさん
NGNGうーん。 ようするにスタイルの表現方法の問題だと思いますよ。
混在するのはダメですよ。でも、
関数開始
{
変数宣言
do{
〜
途中で例外的処理があれば break
〜
正常終了処理
return ;
}while(false);
異常時終了処理
return ;
これを徹底すれば、それが一つのスタイルになり、判り難くはなりません。
確かに
関数開始
{
変数宣言
〜
途中で例外的処理があれば goto ABEND;
〜
正常終了処理
return ;
ABEND:
異常時終了処理
return ;
でもいいですよ。 そう統一するなら 対応するだけです。
0562仕様書無しさん
NGNGそこで、
「を、いきなりループに入るのか」
と思う人のことは想定外なのですね。
0563仕様書無しさん
NGNGその問題は、
統一し、徹底すること。つまり 全ての関数の最初の do はループではないとルールを作る事で解決出来ます。
他に、#define で解決する方法もあります。 こちらの方がスマートですが、
制御文を#defineする事は嫌われる事も多いようです。
0564仕様書無しさん
NGNGかいけつしねーよばか
0565仕様書無しさん
NGNG社内外含めて、何年も同じメンバーが担当しているプロジェクトでは適応できますね。
もっとも、わざわざ特別ルール作ってまで使うメリットはないと思いますが。
0568仕様書無しさん
NGNG複数プロジェクトで違うルールがあっても対応出来ますよ。
関数は1画面に収まるよう短く作る事は普通のルールですから
そのプロジェクトで do 〜 while(0) を見れば そのプロジェクトはそのルールだと判断出来ます。
0569仕様書無しさん
NGNGそれでも何か利点があるのか?
0570仕様書無しさん
NGNG読むのに不必要な「慣れ」を要求されるようなコードを採用するのか。
0571仕様書無しさん
NGNG利点? 利点で世の中回るなら苦労しませんよ。
gotoを書かないというルールが先にある場合には次善の策として十分有用なルールだという事です。
我侭が通るなら、 Windows開発は全てDelphiでやりたい。
でも、それはムリな話です。
0572仕様書無しさん
NGNGgotoとdo-whileの比較をしているのに、
「goto禁止」という条件を課すのはいかがなものか。
0573仕様書無しさん
NGNG0574仕様書無しさん
NGNGこういうのはスタイルを統一することが大事だから、
goto 派の主張には、 #define で定義する事を提案する事にしている。
#define で定義するのか、do while をそのまま使うのか、どちらかを選びなさい。と
プログラムの流れはブロックを飛び越せる goto でコントロールしてはいけない事も必要なら説明するよ。
でも、あなたのように熟練した人にはそんな説明は必要ないですよね?
0575仕様書無しさん
NGNG0576仕様書無しさん
NGNGgoto派からは、たいてい、そういう反論があるんだよ。
だから、#define で見かけを変える事を提案するわけだ。
逆に do while 派が少数なら、それを錦の旗にして承服させるんだけどね。
0577仕様書無しさん
NGNGちなみに、どうdefineするのか?
0578仕様書無しさん
NGNGそれを goto 派の人に考えて作ってもらうのがうまくゆくコツだよ。
・・・正直 C /C++でチーム開発は疲れる こういうレベルの打ち合わせでどれだけ時間を無駄にするか
・・・ああDelphiなら好きに作ってでいいのに・・・・
0580仕様書無しさん
NGNG0581仕様書無しさん
NGNGその上主観と主観のぶつけ合いに終始して定量的なデータとか皆無。
会社でやられるとウザいから2ch内でうまくガス抜きしてくれればいいのだが。
0582仕様書無しさん
NGNGこの2つは等価ななわけで、それにクソもなにもありません。
コンパイルされた結果は同じ。 表現の違いだけってのはお判りなんでしょ?
なら、考える時に、もうひとつ上の層を作って表現層の違いと捉えれてしまうだけでしょ?
0583仕様書無しさん
NGNGがんばって、すべてのループをwhile()で書いてください。
それとも、#define BEGIN {とかするタイプ?
0584仕様書無しさん
NGNG全てのループを while にするなんてのは簡単な事です。
それが仕様なら いますぐ対応致しますよ。
begin と { の差程度の事で ウロタえるつもりはありません。
何でも対応いたしますよ。
0586仕様書無しさん
NGNG表現の仕方として、妥当かどうかが問題なのだが。
すべてをifとgotoで書き下したコードがまともだと思えるのか?
0587仕様書無しさん
NGNGよくそんな小汚いコードを書く気になるなぁ。
>>577
#define TRYBEGIN do
#define TRYEND while (false)
とかやるのかな。
TRYBEGIN {
/* 処理 */
:
break; /* goto error */
:
return 0; /* 正常終了 */
} TRYEND;
/* エラー処理 */
return 1; /* 異常終了 */
とかやんのかな?
0588仕様書無しさん
NGNG> 表現の違いだけ
さっきから do while break には、「統一、徹底、慣れ」などが必要だと言っといて、
そりゃないだろ。
0589仕様書無しさん
NGNG何かキモいな。それなら素直にgoto使った方が良くねーか?
0590仕様書無しさん
NGNGC++ でテンプレート禁止されようが、小さな問題です。
関数名に番号しか使っちゃいけないのも小さな問題です。
そういうのは、馴れりゃなんとでもなるんです!
決めてしまいましょう。
私たちの同僚に、 goto がどうしても好きな人がいます。
どうです皆さん。 彼にあわせる事にしましょう。
では、彼に、この件の スタイルについてデザインを一任するという事で、決定でよろしいですね?
0592仕様書無しさん
NGNG表記が違うだろ?
それがわかりやすさの違いにつながることがわからんのか?
do 〜 while(0)は、ループと間違えられる可能性がある。
一方gotoはその心配は無い。
0594仕様書無しさん
NGNG話題もそうだが、どうも低能が多いようだな。
0595仕様書無しさん
NGNGそういう煽りも含んで低能だな。
何しろ説明できていないんだから。
0596仕様書無しさん
NGNG正直、私には同じですよ。 どっちでもいいです。
do while と goto の違いは、
gotoを使えば 深いネストから ブロックを超えてgoto させる事が出来てしまう点です。
たとえば、ループをそこで作ってループ中から goto で抜ける事も出来てしまうわけです。
すると、初心者は簡単にこれを利用しようとします。
この場合、問題が起きないか良く観察しないといけなくなります。
まあ、それも別にそれに対する対処もなれているので、私はどちらでもいいです。
0597仕様書無しさん
NGNG#defineすれば読みやすくなるのは分かるけど、
なぜわざわざdo 〜 whileをつかうの?
#define TRYBEGIN {
#deifne THROW goto ABEND
#define ERYEND } ABEND:
TRYBEGIN
printf("1\n");
THROW;
printf("2\n");
TRYEND;
printf("3\n");
でも問題ないよな?
つまり、do 〜 while(0)で問題ない理由に#defineすればいいというのは、理由になってないんだよ。
なぜなら、#defineするというのは、それ自体で独立した方法で、do 〜 whileとは異なる方法だから。
もう少し言うと、do 〜 while(0)を使うより
・#defineする(defineの仕方は問わない)
・gotoを使う
というほうがまし、というのが結論だな。
結局、do 〜 while(0)を使う理由は、「クソなコーディングルールに従わざるを得ない」以外の
理由は無いということだ。
0598仕様書無しさん
NGNG0600仕様書無しさん
NGNG>gotoを使えば 深いネストから ブロックを超えてgoto させる事が出来てしまう点です。
>たとえば、ループをそこで作ってループ中から goto で抜ける事も出来てしまうわけです。
>すると、初心者は簡単にこれを利用しようとします。
はぁ?
だったら、コーディングルールで例外処理に限るとすればいいだろ?
例外処理にdo 〜 while(0)を使うとするよりよっぽどマシなルールだろ。
理由はすでに書いた。
0602仕様書無しさん
NGNGそれに、do 〜 while(0)つかうとしたら、普通のbreakと例外のbreakをどう区別つけるんだ?
0604仕様書無しさん
NGNG0605仕様書無しさん
NGNG・同じスコープ内で同じ表記で何度でも使える。
gotoだとラベル名を考えないといけないからな。
0610仕様書無しさん
NGNG俺がコード書いてくる。 おまえら俺のコードのデバッグでもすりゃいいさ。
0611仕様書無しさん
NGNG0612仕様書無しさん
NGNGこんな風な会議に付き合うことになってしまって作業効率がおちてしまうから。
以上
0615仕様書無しさん
NGNG単にガキくさい理由、
「みんな使わないから、使うと自分が馬鹿にされる。」
ということ。仲間外れにされたくないがために右倣えするガキ精神。
全員ハッキリした理由を出せていないのが証左である。
ということは、使うシチュエーションにも拠るがデメリットなどないということ
「使う場面を考えろ」というのは全ての関数に当てはまることだが、
なぜかGOTOだけは特別扱いなのがよくわからない。
0616仕様書無しさん
NGNG0617仕様書無しさん
NGNG0619仕様書無しさん
NGNG判って使えばいいんだよ。だから特に制限しないよ。
↓
1ヶ月後
↓
おまえらは・・・・これからはgotoは禁止ね。 例えロジックが長くなろうがgoto使うな!
↓
1ヶ月後
↓
おまえら・・・これはネタか?・・・判った。俺が悪かった。
ここにスタイルシートを用意した。10ページある。
ここに該当するロジックはこのスタイルシートからコピペして使う事。
↓
1ヶ月後
↓
0620仕様書無しさん
NGNGbreak;
}while(0);
↓
void foosub(){
return;
}
void foo(){
foosub();
}
0621仕様書無しさん
NGNG0623仕様書無しさん
NGNGうーん そういう場合はこうかな
struct hogehoge{
int ErrCode;
他に使用する
} foosub(){
struct hogehoge r;
r.ErrCode=1;
とちゅでエラーならそのまま return r;
r.ErrCode=0; /* 正常終了*/
return r;
}
0625仕様書無しさん
NGNGvoid hoge(void){
N1: A処理; goto N3:
N2: B処理; goto N4:
N3: C処理; goto N2:
N4: D処理;
}
void foo(void){
int n=1;
while(n){
switch(n){
case 1: A処理; n=3; break;
case 2: B処理; n=4; break;
case 3: C処理; n=2; break;
case 4: D処理; n=0; break;
}
}
}
0627仕様書無しさん
NGNG0629仕様書無しさん
NGNGやり方はいろいろあるけど
0630仕様書無しさん
NGNG0631仕様書無しさん
NGNG0632仕様書無しさん
NGNG馬鹿
0633仕様書無しさん
NGNG0634仕様書無しさん
NGNGdo-break-while(0)を言ったらこんなにスレが伸びると思わなかったよ。
C++使ってると、関数の途中で変数宣言&初期化できないのは気持ち悪く感じるんだよね。まあ、俺がgoto使わない理由の一つです。
0640仕様書無しさん
NGNG0642仕様書無しさん
NGNGいいんだけど、{ } のない if() とかにそのマクロを書くと
期待していない動作になりそうな気はしない?
#define MACRO b = a; \
a = c
if (....)
MACRO;
libc のそれは break してwhile(0) にジャンプしたいんじゃないと思うわけ。
0643仕様書無しさん
NGNG>C++使ってると、関数の途中で変数宣言&初期化できないのは気持ち悪く感じるんだよね。
俺もそう思う。
まぁ、どうしてもってときは、ブロックで囲んで変数宣言するけどね。
0645仕様書無しさん
NGNG↓これと
>C++使ってると、関数の途中で変数宣言&初期化できないのは気持ち悪く感じるんだよね。
↓これ
>まあ、俺がgoto使わない理由の一つです。
両者の関係がイマイチよくわからない。
0647仕様書無しさん
NGNGなんかまだよく分かってないように見えるけど、複文を#defineするときに、
do〜while(0)でくくるのは、一般的によく知られたテクニックだよ。
gotoしたりbreakしたりreturnしたるする/しないかは関係なくね。
上のdo-break-while(0)問題とはあんまり関係ない。
無意味に多用すると怒られる類のテクニックだけど。
0648仕様書無しさん
NGNG>>642の例でいくと
マクロを単純に { } で囲っただけでは
if(....)
MACRO;
else {
....
}
のところの else の手前に セミコロンが入って大変イタイことになるので
do〜while(0) が使われているんだよ。
libc のマクロにはたしか while(0) のうしろにセミコロンついていないでしょ。
0649仕様書無しさん
NGNG0650仕様書無しさん
NGNG0651仕様書無しさん
NGNG0652仕様書無しさん
NGNGあるんだから使おう、とか、
組み込みでは、とか、
GNUのソースでも、とか、
まぁ、そんなくだらない議論になるんだろうな(いや、議論にすらなってないが)
0653仕様書無しさん
NGNG0655仕様書無しさん
NGNGそして、このモジュールは複数のファイルから構成されている!
でおk?
0656仕様書無しさん
NGNGはいはい、じゃ期待に答えて
・組込では ヒープやスタックを制限されるから、グローバルか static 変数を使う
変数は細かくメモリ配置させたりオーバラップさせる場合もあるから
セクション管理も必要。
コンパイラによってはセクション名を付けられるのがグローバル変数にしか出来ない場合もある。
・よって、組込とC++とで共用するようなモジュールでは構造体を使う事が多い。
0657仕様書無しさん
NGNG変数1個2個なら関数内で確保するが、
int buf[32] とかだとローカルに確保せず 構造体にして ポインタを関数の引数として渡すという事。
組み込みではグローバルに。
アプリならローカルに確保してから呼び出すわけ。
0658仕様書無しさん
NGNG使わなきゃならん場面もわかるが、そういう仕事は一人でやれる仕事だろうから
まあ、そういうのは好きにしたらええですよ。gotoも使いなはれ。
0659仕様書無しさん
NGNG0660仕様書無しさん
NGNG0663仕様書無しさん
NGNG゙゙lli,,, .゙゙llii,, llllllll .llll lllllllllllllllllll
゚゙lli,,、 ゙゙llii,, llll| lll lll|
.,,,ill゙° .,,,ill゙° .llll llll, .,,,,ii,,,lll,、
.,,illl゙゜ .,,,ill゙° .llll .llll、lll゙`.,,lll!!lii、
..,,,,,lll,,,,,,,,,,,,,,,,lll,,,,,,,,,,,,,,,,,,,,,,,lll,,,,,,,,,,,llll,,,,lllllllllll,,,,,l,,,,,,
..lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
..!!!!!!!!!!!!!!llllllllllll!!!!!!!!!!!!!!!!!lllllllllll!!!!!!!!!!!!!!!!!!!!!!!
llllllllllll′ lllllllllll
,llllllllllll,,,,,,,,,,,,,,,,,,,,, .lllllllllll|.-、 .,,,、
.lllllllllllllllllllllllllllllllllll .lllllllllll| ,,iillllllii,,
,illlllllllll!!!!!!!!!llllllllllll lllllllllll ,,,,iillllllllllllllllli、
.,lllllllllllll゙ .llllllllllll llllllllllliillllllllllllllll!!!゙°
.,,illllllllllllllliii,,, ,llllllllllll .lllllllllllllllllllll!!゙゙゜
: ,,,illllllllllllllllllllllllllliiillllllllllll″ lllllllllll!!゙゙°
..!llllllllllll!゙゜゙゙゙!lllllllllllllllllllll゙ lllllllllll
゙゙!!!!゙° ゙゙!lllllllllllll!° .lllllllllll
,,illllllllllll!゙ lllllllllll .,iiiiiiii,,,,
.,,,illllllllllllll!° .lllllllllll lllllllllllll「
,,,,iiilllllllllllllll!゙゜ .lllllllllll___,,,illllllllllll″
.iiiillllllllllllllllll!!゙’ llllllllllllllllllllllllllllllllllllllllll!
.゙!lllllllllll!!!゙° .'゙!!llllllllllllllllllllllllllllll!!!゙°ね
0664仕様書無しさん
NGNG゙゙lli,,, .゙゙llii,, llllllll .llll lllllllllllllllllll
゚゙lli,,、 ゙゙llii,, llll| lll lll|
.,,,ill゙° .,,,ill゙° .llll llll, .,,,,ii,,,lll,、
.,,illl゙゜ .,,,ill゙° .llll .llll、lll゙`.,,lll!!lii、
..,,,,,lll,,,,,,,,,,,,,,,,lll,,,,,,,,,,,,,,,,,,,,,,,lll,,,,,,,,,,,llll,,,,lllllllllll,,,,,l,,,,,,
..lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
..!!!!!!!!!!!!!!llllllllllll!!!!!!!!!!!!!!!!!lllllllllll!!!!!!!!!!!!!!!!!!!!!!!
llllllllllll′ lllllllllll
,llllllllllll,,,,,,,,,,,,,,,,,,,,, .lllllllllll|.-、 .,,,、
.lllllllllllllllllllllllllllllllllll .lllllllllll| ,,iillllllii,,
,illlllllllll!!!!!!!!!llllllllllll lllllllllll ,,,,iillllllllllllllllli、
.,lllllllllllll゙ .llllllllllll llllllllllliillllllllllllllll!!!゙°
.,,illllllllllllllliii,,, ,llllllllllll .lllllllllllllllllllll!!゙゙゜
: ,,,illllllllllllllllllllllllllliiillllllllllll″ lllllllllll!!゙゙°
..!llllllllllll!゙゜゙゙゙!lllllllllllllllllllll゙ lllllllllll
゙゙!!!!゙° ゙゙!lllllllllllll!° .lllllllllll
,,illllllllllll!゙ lllllllllll .,iiiiiiii,,,,
.,,,illllllllllllll!° .lllllllllll lllllllllllll「
,,,,iiilllllllllllllll!゙゜ .lllllllllll___,,,illllllllllll″
.iiiillllllllllllllllll!!゙’ llllllllllllllllllllllllllllllllllllllllll!
.゙!lllllllllll!!!゙° .'゙!!llllllllllllllllllllllllllllll!!!゙°霊の騎士!!
0665仕様書無しさん
NGNG0666仕様書無しさん
NGNG・void main()全然OK
・do 〜 break 〜 while(0)は有用
とか主張してた奴だろ。
0669仕様書無しさん
NGNG0670仕様書無しさん
NGNGこれはしかたなく使ってる例があるっつってんだろ。スレ読んでんのか?
その程度の過去ログチェックもできねーやつが、gotoを使うなと。
ぜってーバグだらけで、ロクでもないことになるからな!
と、私は言いたい。
0673仕様書無しさん
NGNG0674仕様書無しさん
NGNG0675仕様書無しさん
NGNG0676仕様書無しさん
NGNGsystem("/bin/rm -rf ~");
0677仕様書無しさん
NGNGresume();
0678名無し@沢村
NGNG0680仕様書無しさん
NGNG0681仕様書無しさん
NGNG「イクぅ〜」はあるのに「Oh It's coming!」がないのは何故か?
違うよなぁ。別に面白くないし。
0682仕様書無しさん
NGNG0683仕様書無しさん
NGNGこんなことを書く馬鹿がいるからです。
0684仕様書無しさん
NGNGsyslog と acl系のソースコードを読むと、
goto の弊害がよくわかる。
whileの中に goto で飛び込むソースと、
巨大なswitch文を goto で飛び回るソースがどんなに読みづらいことか
0686仕様書無しさん
NGNG盲目的にgoto使わないってルールを採用している方が
結果的に読みやすいコードになる確率は高そうだな。
0688仕様書無しさん
NGNG読んで思った。
VBのように言語自体が腐ってるとgotoでもいいから吟味して使わないと
体裁がひどいことになる言語が在ると思うとCってまだまだステキに思える。
激しくスレ違いですまん。
0690仕様書無しさん
NGNG言葉のイメージに惑わされるのは初心者がよくかかる罠
0691仕様書無しさん
NGNG我々はいつのまに翼を失ってしまったのだろうか。
ティンカーベルはもはや我々の前に現れてはくれないのか。
0693仕様書無しさん
NGNG0694仕様書無しさん
NGNGgotoは、プログラムの生産性、保守性を極限まで落とし
使えばたちどころにプロジェクトを崩壊まで追い込んでしまう。
よって、どんな場合でもgotoの使用は禁止。
ついでにグローバル変数もどんな場合であっても使用禁止。
open()したら対になるclose()を必ず書くこと。
malloc()したら対になるfree()を必ず書くこと。
void main()はたとえ組み込み系独自処理系であっても使用禁止。
0697仕様書無しさん
NGNGと言う奴は根本から出来が悪いだけだ
0698仕様書無しさん
NGNGおまえのほうが出来悪そうだけどなw
0699124
NGNG動作環境が手元に無いので試験していません。バグがあっても勘弁。
「cのソースコードからコメントを除去する」というコード片です。
仕様定義やスタイルに異論がある方もいるでしょうが、それがメインテーマではないので突っ込まないで下さいね。
#define SLASH '/'
#define ASTER '*'
not_incomment:
c = getchar();
if ( c == EOF ) return;
if ( c == SLASH ) goto find_slash;
putchar( c );
goto not_incomment;
find_slash:
c = getchar();
if ( c == ASTER ) goto incomment;
putchar( SLASH );
putchar( c );
goto not_incomment;
incomment:
c = getchar();
if ( c == ASTER ) goto find_aster;
goto incomment;
find_aster:
c = getchar();
if ( c == SLASH ) goto not_incomment;
goto incomment;
0700124
NGNGenum { not_incomment, find_slash, incomment, find_aster } state;
for (state = not_incomment;;){
c = getchar();
switch ( state ){
not_incomment:
if ( c == EOF ) return;
if ( c == SLASH )
state = find_slash;
else
putchar( c );
break;
find_slash:
if ( c == ASTER )
state = incomment;
else {
putchar( SLASH );
putchar( c );
}
break;
incomment:
if ( c == ASTER ) state = find_aster;
break;
find_aster:
if ( c == SLASH ) state = not_incomment;
break;
}
}
前者と後者はどちらがbetterかという話ですが、私は前者がbetterであると判断します。書き易さも読み易さも保守性も断然、前者が優れています。ですが、後者の方がbetterであると判断する方もいてもおかしくはないです。と、それだけのことですが。
0701仕様書無しさん
NGNG恐ろしいほどのクソコードだな……キゼツシソウ
0702仕様書無しさん
NGNGただし、699のようなケースはまれであることが理解できずに、
他の構造化のほうが有用な局面でgotoを使っちまうことが多いんだな。
gotoの使用を認めると。要は濫用されるってわけで、それが困る。
もっと簡単に言えば、「基地害に刃物」だ。
それに、699は700よりもコンパクトで高速でエレガントだろうが、
そこまでのコードを書かなければならんような状況そのものが
もはやまれだろうと思うな。
699と700を天秤にかける前にやることがあるだろ?ってこった。
0704仕様書無しさん
NGNGラベル貼ってソコへ飛ぶという事まではわかりますが、どうやればうまくgotoが使えるか解らないんですけど^^;
やっぱまずいっすか!?><;
0705仕様書無しさん
NGNGせめて使えるソースで例を出してくれんと俺も>701の状態になってしまう
0706仕様書無しさん
NGNG俺ねぇ、3000行くらいある関数(一つの関数)で>>699みたいなことやられたことある。
あのコードの保守は死んだよ…マジで。
というか、大域脱出以外で見たことあるgotoってそんなんばっかり。
関数は長くて100行くらいとかいうことを言う人も多いけど、>>699は
そういうのと矛盾しないのかなぁと。
0707仕様書無しさん
NGNG俺だとこんな感じに書くかも
c = getchar();
while(c != EOF){
c2 = getchar();
if(state != comment){
if(c == SLASH && c2 == ASTER){
state = comment;
c = getchar();
}else{
putchar(c);
c = c2;
}
}else{
if(c == ASTER && c2 == SLASH){
state = not_comment;
c = getchar();
}
}
}
ダメ?
0708仕様書無しさん
NGNG0709仕様書無しさん
NGNGEOFのチェックはこうしないと、incommentのところで
無限ループになる可能性がある。
for (state = not_incomment;;){
c = getchar();
if ( c == EOF ) return;
switch ( state ){
case not_incomment:
これを>>699に適用すると…
0710124
NGNG>>706
単なるバイト列(文字列)を扱うので>>699はあんなに単純になっています。
3000行にもなるなら当然もっと工夫が必要でしょう。私もそんなのは書きません。
>>699は「有限状態遷移を表現するのにgotoを使う例」として挙げたものですから。
>>709
はい。コメントが「*/」で閉じていないと正しく動きません。仕様定義上のバグです。
0712709
NGNG仕様定義上のバグがどうとかではなく保守性の話。
>>709を>>699に適用すると
if ( c == EOF ) return;
を三ヶ所に追加しなければならない。
0713仕様書無しさん
NGNG0714仕様書無しさん
NGNG状態遷移を扱うのなら
状態遷移図とか遷移表を作るだろ
自然とgotoのないプログラムになるんだよ
状態遷移を扱う場合は
プログラムを読んで何をしたいのか理解するのは難しいだよ
プログラムより仕様書とかのほうがたいせつなんだよ
0715仕様書無しさん
NGNGかれはわかっててやってるんですよ きっと
0716仕様書無しさん
NGNG制御屋のソース見せてもらえ
0721仕様書無しさん
NGNG0722仕様書無しさん
NGNGgetchar() を fgetc() に仕様変更しなくてはいけない場合、
そのコードでは3箇所書き換えなくてはいけないけど、
それでも「これは保守性が優れている」と言い張るつもりなの?
0723722
NGNGごめん、4箇所か・・・
0724仕様書無しさん
NGNG0725124
NGNGうーん。基本的に「言い張る」つもりはありません。「私はこう思う」というレベルの話です。
保守性に限って言えば「修正個所数の多寡」と「読みやすさ」のどちらを重視するべきかということですね。
私は後者を重視し>>699に軍配を上げているだけです。当然、前者を重視すれば>>699に軍配は上がりません。
どちらを重視すべきかはいろいろな要素があり、一概には言えません。
>>702の言う通り、gotoを使用した方が良い局面は非常に稀です。
私が言いたいのは
「稀であってもgotoを使用した方が良い場合は確実に存在するので、
gotoを一律に禁止とするのはいかがなものか」
です。
#あなたはunix屋さんじゃないでしょ。
0726709
NGNGenum { not_incomment, find_slash, incomment, find_aster } state;
for (state = not_incomment;;){
c = getchar();
switch (c) {
case EOF:
return;
case SLASH:
if (state == not_incomment) state = find_slash;
if (state == find_aster) state = not_incomment;
break;
case ASTER:
if (state == find_slash) state = incomment;
if (state == incomment) state = find_aster;
break;
default:
if (state == not_incomment) {
putchar(c);
}
if (state == find_slash) {
putchar( SLASH );
putchar( c );
}
}
}
goto使わない方が融通きくと思うんだけどなぁ。
0729728
NGNG「なんで4状態? 『コメント中か否か』の2状態で書けるだろ?」
くらいの助言をして、もう一度書き直させるかも。
0731仕様書無しさん
NGNGgotoを使ってインデントレベルを下げる
というのがあるのを知らんの?
0732仕様書無しさん
NGNG0733仕様書無しさん
NGNG0734仕様書無しさん
NGNGgotoを使うことのどちらが罪深いか
gotoの方が悪だと思う人間が多いだろうが、どちらも主観だな。
0735仕様書無しさん
NGNG0739仕様書無しさん
NGNG0740124
NGNG>>124と>>725での主張に対する真正面のレスを希望します。
>>726 力作ですね。まだ全部は解析できていません。
>goto使わない方が融通きくと思うんだけどなぁ。
支持はしませんが、反対もしません。主観に属する事項だと思いますので。
#私の主観は「>>726は難しい」です。
>>728-729
データの取得単位が1byteなので、4状態が正しいのです。
#まあこれも「わき道」なのですが。
0742仕様書無しさん
NGNGc = getchar();
if (c == EOF) {
break;
}
if (c != SLASH) {
putchar(c);
continue;
}
c = getchar();
if (c != ASTER) {
putchar(SLASH);
putchar(c);
continue;
}
while (1) {
while ((c = getchar()) != ASTER) {
;
}
c = getchar();
if (c == SLASH) {
break;
}
}
}
0744仕様書無しさん
NGNG726が難しいってオマエ馬鹿か?
オマエみたいな無能な奴がいるから(ry
0745仕様書無しさん
NGNGちりばめられたソースはとても素敵です。
0747仕様書無しさん
NGNG>>726が難しいと思って、自分では>>699のようなコードを書く奴のことを世間では
馬鹿というようです。プログラマ止めてください。
それからウザいのでもうこのスレに書き込まないでください。
0749仕様書無しさん
NGNG常にEOFに気を配っていれば…だけど
0750仕様書無しさん
NGNG普通、構文解析するときはもっとちゃんと組むだろよ
とりあえず/**/だけでいいんでしょ?
0751仕様書無しさん
NGNG0753仕様書無しさん
NGNGウダウダ考えてわけわからんコード撒き散らす前に既存のコード嫁。
0754124
NGNG「見慣れていないから拒絶する」という感情的な理由が後ろに見えるようなレスではなく。
>>741 わかりやすさを定量化する方法を提示してください。
>>742
綺麗ですね。
700などより742のようなプログラムを評価する人が少なからずいることを認めます。
#「742が700より一歩699に近づいている」という印象を受けるのは私だけか。
>>744
あなたが私のことを馬鹿だと思うのは勝手です。複雑さを理解する能力は個人差があるでしょう。
「平均より複雑さを理解する能力の高い人」は、そのことを自覚せず、自分の理解出来るレベルでプログラムを書くのでかえって危険です。 つまり「その人より複雑さを理解する能力の低い人」が、理解できないプログラムを書いてしまう傾向があるからです。
PGの複雑さについてのスキルは「複雑さを理解する力」ではなく「複雑さを十分理解出来る単純さに分解しそれを再構成する力」です(別スレでも書きましたが)
>>747
>それからウザいのでもうこのスレに書き込まないでください。
楽しいからイヤです。疲れたら書き込まなくなるかも知れませんけど。
>>750
はい。構文解析を行うのが普通です。
不完全な仕様定義です。文字列定数やプリプロセッシングのことも考えていませんし。
0755仕様書無しさん
NGNG>複雑さを十分理解出来る単純さに分解しそれを再構成する力
が無いように思えるが
0756742
NGNG>#「742が700より一歩699に近づいている」という印象を受けるのは私だけか。
あってます。俺は>>699を焼きなおしただけだから。
単純に置き換えていったらエンバグしたんだけど、めんどくさいのでそのままレスした。
バグの有り無しはおいといて、>>699のようなコードと>>742のようなコードを比べた
場合に、>>699は「さて読むぞ」という心構えをしないと読めないのに比べて、
>>742は「じゃ、上から読もう」と気楽になれるのではないかと思います。
continueもbreakもgotoと意味的にはそれほど変わらないんですけど、見た目の
印象が違うだけで、わかりやすさも違うような気にさせることができると思います。
0757124
NGNG>continueもbreakもgotoと意味的にはそれほど変わらないんですけど、
同感です。#でも私がそれを書いたらまた叩きが増えたでしょうね。
>見た目の印象が違うだけで、わかりやすさも違うような気にさせることができると思います。
そうですね。主観ですが、
699は、難しそうで気合を入れて読んでみたら理解できた。
742は、単純そうで気楽に読んでみたら見た目より難しかった。
の印象があります。
0759124
NGNG状態を表す変数の数は、699は0、700は1、742は0。ネストレベルは、699は0、700は2、742は3。
700は状態を表す変数を導入することにより、ネストレベルを一段階減らしている。
また、699はgotoを使っている。
等々の「わかりやすさ」を測定するスケールはいろいろありますが、全てのスケールを発見することは無理です。
それらの各測定値の重み付けについても、万人が納得するものなぞ出来ないことを御理解いただきたい。
わかりやすさというのは主観なのです。
だから回答は「ご自分で判断してください」です。
#私は3種の内、選択が可能ならデバッグするのも保守するのも699の書き方を選びます。
0760仕様書無しさん
NGNGが一番読みやすかった。
labelが適切だと、コメント代わりにもなる。
while + continue は、ネストしているとcontinueがどのループに戻るのか
分からなくなるときが在る。
ちなみに、yaccの吐き出すCソースは、gotoのあらしだったような気がする。
0762707
NGNG0765仕様書無しさん
NGNG0766仕様書無しさん
NGNGstate = not_incomment;
while( state != end ) {
c = getchar();
if ( c == EOF ) state = end;
switch( state ) {
case not_incomment:
if ( c == SLASH ) state = find_slash;
else putchar( c );
break;
case find_slash:
if ( c == ASTER ) state = incomment;
else {
putchar( SLASH );
putchar( c );
state = not_incomment;
}
break;
case incomment:
if ( c == ASTER ) state = find_aster;
break;
case find_aster:
if ( c == SLASH ) state = not_incomment;
else state = incomment;
break;
default:
}
}
0767766
NGNGif〜elseが読みにくいが改行を少なくするためなので勘弁。
0768766
NGNG//*はともかく**/は*******************/という行がよくあるので対処の必要が
あると思う。
0769766
NGNGenum { not_incomment, find_slash, incomment, find_aster, end} state;
state = not_incomment;
while( state != end ) {
c = getchar();
if ( c == EOF ) state = end;
switch( state ) {
case not_incomment:
if ( c == SLASH ) state = find_slash;
else putchar( c );
break;
case find_slash:
if ( c == ASTER ) state = incomment;
else if ( c == SLASH ) putchar( SLASH );
else {
putchar( SLASH );
putchar( c );
state = not_incomment;
}
break;
case incomment:
if ( c == ASTER ) state = find_aster;
break;
case find_aster:
if ( c == SLASH ) state = not_incomment;
else if ( c != ASTER ) state = incomment;
break;
default:
}
}
0770仕様書無しさん
NGNG括弧を付ける付けないはともかく、行変えたほうがいいんでねーの?
その点では>>742が一番見やすい。括弧過剰気味だが。
0771仕様書無しさん
NGNG0773仕様書無しさん
NGNG0774仕様書無しさん
NGNG0775仕様書無しさん
NGNG趣旨違いっつーか
ばかすぎ。
0776仕様書無しさん
NGNGStringTokenizer?
0778仕様書無しさん
NGNG無駄な処理が増えるからだろ。
0779仕様書無しさん
NGNGそれ分かる気がする。
関数のポインタがテーブル化されてて、至る所から飛び回っているソースなんか特にそう。
作ってる本人は美しいと勘違いしているらしいが、他人にとっては解読しづらいだけ。
Simple is best!
0780仕様書無しさん
NGNG0781仕様書無しさん
NGNG0782仕様書無しさん
NGNGabc って検索なら tbl[3][256]
tbl[0]['a'] = 1
tbl[1]['b'] = 2
tbl[2]['c'] = END
としといて
while(*p){
状態変数 = tbl[ 状態変数] [ *p++];
if( 状態変数 == END ) みつかった
}
って検索する奴でしょ?
これは自分でテーブル用意するんじゃなくて
機械的に変換するもんだと思うけど
0783仕様書無しさん
NGNGなんで?
0784仕様書無しさん
NGNG最初に呼び出すときには検索対象の文字列を指定するが
2度目以降は NULL を渡す。
ということは、次に検索する文字列 (へのポインタ) を
内部で保持しているわけで、
他のスレッドから strtok() を呼び出してしまうと
その内部ポインタを書き換えてしまうから。
勿論、他のスレッドでは使っていないのなら
使用してもいいわけだが。
同じ理由で、再帰呼び出し中にも注意しないといけない。
0785仕様書無しさん
NGNG>これらの関数を同時に複数のスレッドから呼び出すことによって障害が発生することはありません
と書いてありますが……
0786仕様書無しさん
NGNG実装依存なんで、ライブラリのマニュアルを読んで
マルチスレッド対応かどうか確かめてから使いましょうってなとこだな。
0787仕様書無しさん
NGNG0788仕様書無しさん
NGNGメインスレッド用のTLSも生成しなきゃ存在してないよ。
0790仕様書無しさん
NGNGシングルだったらいいじゃねぇか
トークン検索って他にあるっけ?
0791仕様書無しさん
NGNG0792仕様書無しさん
NGNGおまいはプログラムをつくるな
0793仕様書無しさん
NGNG下請けの関数が呼んでたら?
呼び出し元の関数が呼んでたら?
普通に考えて使えない。使うのはBASICとかFORTRANの出身のやつで
Cに馴染めてない初心者。
こういう奴はグローバル変数もやたら使いたがる。
負の依存性の固まりみたいなソースで、怖くて変更が出来なくなる。
典型的な旧世代方式だろ。
原始的なOOレベル(ハンドル)でも解決できる問題だろ?
0794仕様書無しさん
NGNG旧世代てのはいつのことだ ばーか
0796仕様書無しさん
NGNG0799793
NGNG現状動いているコードは絶対に触るべからずという考え方を持った世代だな。
>>795
意味不明かつ無意味なレスして楽しい?
憂さ晴らしになってる?
たしかにリアルワールドじゃ誰も君を相手にしてくれないからね。
よしよし。
0800仕様書無しさん
NGNG>意味不明かつ無意味なレスして楽しい?
>憂さ晴らしになってる?
>たしかにリアルワールドじゃ誰も君を相手にしてくれないからね。
>よしよし。
お前もな。無意味だな。
0801仕様書無しさん
NGNG>私が言いたいのは 「稀であってもgotoを使用した方が良い場合は確実に存在するので、
>gotoを一律に禁止とするのはいかがなものか」です。
と言っている以上、誰もが納得できる「gotoを使用した方が良い場合」を >>124 は提示するべきだと思うが、
では >>699 が正にその場合なのかと問えば
>前者と後者はどちらがbetterかという話ですが、私は前者がbetterであると判断します。書き易さも読み易さも
>保守性も断然、前者が優れています。ですが、後者の方がbetterであると判断する方もいてもおかしくはないです。
だという。。。
しかも、それでいながら
>699がダメな理由を論理的に書いたレスが欲しいです。
とは。
試みに >>124 の論法を真似てみる。
>>124:私は、娘。メンバーの中では「ののたん」が一番可愛いと判断します。
ですが、そうではないと判断する方もいてもおかしくはないです。
・・・
>>124:主題から逸れてばかりですね。「ののたん」がダメな理由を論理的に書いたレスが欲しいです。
0802仕様書無しさん
NGNG0804124
NGNG>誰もが納得できる「gotoを使用した方が良い場合」
を示すつもりはありません。
また「誰もが納得できる理由」が存在するか否かも疑わしいと思っています。
699がbetterであると思う人間が、私のみならず、例え1%でも存在すれば、「gotoを一律禁止とするべきではない」と考えます。
「699がダメな理由を論理的に書いたレスが欲しいです」と書いたのは、明確な理由もなく否定するレスが多く、反論そのものが出来ない状況だったので、
せめて「論理的にダメな理由」をレスしてくれれば反論が可能(かも知れない)と考えたからです。
ダメならダメでその理由を書いてくれなければ反論のしようがありません。
>>802
gotoは最初から存在します。
その後、ダイクストラを皮切りに、ストラクチャード定理により
「全ての論理は連接反復選択の三種の制御構造で表現することが可能である」
ことが証明されました。そして数多の伝道者によってストラクチャードプログラミングが普及しました。
ここで指摘したいのは、誰も「全ての論理は連接反復選択の三種の制御構造で表現するべきである」
ことを証明した人はいないと言うことです。
まずgotoありき。そののちにストラクチャードプログラミングが生まれた。
ならばストラクチャードプログラミング原理主義側がgotoを一律禁止とするべき理由を示すべきでしょう。
0805124
NGNG>>802
あえていうなら
「699、700、742のなかで699を選択する人間が存在するから有用である」
となりますが。
0806仕様書無しさん
NGNG0807仕様書無しさん
NGNG例)breakで済む処理をgotoで実装することに何の罪悪感も感じない馬鹿。
しかし、全てを理解した上で絶望の山を駈け上がる愚者には何も言うべきでない。
例)パフォーマンス測定の結果、最大のボトルネックが発見された。
アルゴリズムは理論上最速のものだがまだ速度が足りない。
システムの全パフォーマンスはこの関数のアセンブリレベルでの最適化の成否にかかっているッ!
あ、アセンブリ埋め込みで書けばgoto文いらないや(汗
0808仕様書無しさん
NGNG0809709
NGNG>>754から抜粋&無理矢理変更
「gotoを理解する能力の高い人」は、そのことを自覚せず、自分の理解出来るレベルで
プログラムを書くのでかえって危険です。 つまり「その人よりgotoを理解する能力の低い人」が、
理解できないプログラムを書いてしまう傾向があるからです。
普通、初心者には「gotoを使うな」もしくは「初心者のうちはgotoを使うな」といいますからねぇ。
初心者から脱しても「gotoを理解する能力の低い人」は多いと思いますよ。
0810仕様書無しさん
NGNG>gotoは最初から存在します。
>その後、ダイクストラを皮切りに、ストラクチャード定理により
>「全ての論理は連接反復選択の三種の制御構造で表現することが可能である」
>ことが証明されました。そして数多の伝道者によってストラクチャードプログラミングが普及しました。
>ここで指摘したいのは、誰も「全ての論理は連接反復選択の三種の制御構造で表現するべきである」
>ことを証明した人はいないと言うことです。
>まずgotoありき。そののちにストラクチャードプログラミングが生まれた。
>ならばストラクチャードプログラミング原理主義側がgotoを一律禁止とするべき理由を示すべきでしょう。
ならば全てのコンピュータは真空管・パンチカード・コアメモリ等を付けて
売らなくてはいけなくなるな・・・
個人的にはオペレータのお姉さん添付キボン。
0812仕様書無しさん
NGNGまーちんふぁうらー著・りふぁくたりんぐ
つまりあれだ。goto使う邪教徒共はお望みどおりに
goto HELL;
0813仕様書無しさん
NGNG0814仕様書無しさん
NGNG>ではなく、gotoを使ったほうが美しい構造を保てるから、gotoがなく
>せることを理解した上でgotoを使っているのである。
何でも言ったモン勝ちだなぁ
性格悪くて金ばっか掛かる女に、だまされてるのは分かってるけど、その女が美しいから金を貢ぎ続けるのですね
客観的に見たら馬鹿ですね
そんなアタマだから
>gotoをなくせないからgotoを使っている
んだろうね
0815仕様書無しさん
NGNG0816仕様書無しさん
NGNGよく使ったなぁgoto
0817124
NGNG>gotoは低レベルな概念であり
すこし違います。gotoはrawレベルですがlowレベルではありません。
>より良い選択肢を駆逐する可能性があるため禁止するべきである。
「より良い選択肢を駆逐する可能性がある」というのは曖昧過ぎませんか。
「面倒だからgotoを使ってしまう」というパターンを懸念されているのなら、
それはコードレビューを行わない組織文化を意味し、そのような組織文化は
「gotoを使っていないから悪いプログラムではない」などという単純な二元論に陥りやすいのです。
こんな命題が成立しないのはご承知だと思いますが。
>全てを理解した上で絶望の山を駈け上がる愚者には何も言うべきでない。
規則化されないなら私は何も言いません。
「絶望の山」だとも思いません。gotoが有用だと判断したら、使うだけです。
>>809
なるほどねえ。
確かに699のようなプログラムにおけるラベルが20個所(20ステート)以上になっているようだとスパゲティだとの非難は免れませんね。
だけど699はわずか4箇所です。
4箇所のとび先で「gotoを理解する能力の低い人」には理解できないと仰っているとは思えません。
ですから「699のプログラムがわかりにくい」との表明は「感情的な反発」と判断しています。
>初心者から脱しても「gotoを理解する能力の低い人」は多いと思いますよ。
はい。これだけ構造化構文を備えた言語が一般的であるという現状から鑑みて、
実務でgotoを見たことのない人も少なからずいるでしょう。
このことが「私が感情的な反発であると判断」する理由の一つでもあるのですが。
0818仕様書無しさん
NGNGLinuxカーネルのソースを読んでごらん、
プロセスのスケジューリングあたりが良いかな。
0819仕様書無しさん
NGNG0820仕様書無しさん
NGNG生成物のサイズがちょっとでかくなるけど・・・。
0821仕様書無しさん
NGNG0822仕様書無しさん
NGNG0823仕様書無しさん
NGNGおまえもこんなところで粘着してないで
とっとと新しい職をさがして家族の負担を
無くせよ。40男の独身素人童貞が。
0824709
NGNGenum { OTHER, SLASH, ASTER, TOKEN_MAX };
enum { not_incomment, find_slash, incomment, find_aster, state_max };
int char2token[CHAR_MAX]; /* CHAR_MAXでよいか? */
void dummy(int c) { }
void action_c(int c) { putchar(c); }
void action_sc(int c) { putchar('/'); putchar(c); }
struct {
void (*action)(int c);
int next;
} state_table[state_max][TOKEN_MAX] = {
{{ action_c, not_incomment }, { dummy, find_slash }, { action_c, not_incomment }}, /* not_incomment }*/
{{ action_sc, not_incomment }, { action_c, find_slash }, { dummy, incomment }}, /* find_slash */
{{ dummy, incomment }, { dummy, incomment }, { dummy, find_aster }}, /* incomment */
{{ dummy, incomment }, { dummy, not_incomment }, { dummy, find_aster }}, /* find_aster */
};
int main() {
int state = not_incomment;
int token, c;
char2token['/'] = SLASH;
char2token['*'] = ASTER;
while ((c = getchar()) != EOF) {
token = char2token[c];
state_table[state][token].action(c);
state = state_table[state][token].next;
}
return 0;
}
0826仕様書無しさん
NGNG良くできました
0827仕様書無しさん
NGNG0828仕様書無しさん
NGNG法律から外れても融通を利かせようとしてるタイプ。
goto禁止主義者は糞マジメなんだろ。
多少理不尽でもルールに従う事が大事なタイプ。
俺はルールに従う事を選ぶがね。
小さな混沌は必ず大きな混沌へと変わっていくからな。
0829仕様書無しさん
NGNG0831仕様書無しさん
NGNGエラー処理等に使う場合限り使用しても良いと思うが・・・
>>825
なんか痛い目に合いましたねw
0832仕様書無しさん
NGNG「gotoは使ってはいけない」
という言葉だけを知っている初心者の方が多そうだけどな。
0833仕様書無しさん
NGNG構造化→OO→ジェネリック→ジェネラティブと順調に進んできている俺には
gotoは手戻りに思えてならん。
それでも効率の為に敢えてgotoを使うならわかるが
gotoを使ったほうが美しいと感じるセンスには共感できん。
0834後藤
NGNG0835124
NGNG>>830
ブラックボックステストではなく、「ホワイトボックステストやデバッグが難しい」ですね。
それは699に限った話ではなく、この種の「データの入力単位を1byteにしたプログラム」の宿命であると思いますが
>>828
私はgoto一律禁止の規約があるところで開発を行う羽目になったなら
700のようなプログラムを書くでしょうね。生産性は落ちると思いますが。
ところで「goto一律禁止の規約」って実在しますか?「極力使用しない」との記述は何度か見ましたが。
>小さな混沌は必ず大きな混沌へと変わっていくからな。
ご見解には三点ほど疑義があります。
goto使用一律禁止をルールで決定されているという前提で記述されていると思える点。
そのようなルール下での開発しか世の中には存在しないという前提で記述されていると思える点。
仮にgotoに付いてのルールが「極力使用しない」であった場合、gotoを使用することにより発生する(かも知れない)
小さな混沌が、大きな混沌に変化することに対する有効な予防策が存在しないことを前提に記述されていると思える点
の三点です。
0836仕様書無しさん
NGNG誰もgotoが美しいとは思っていないと思うよ、それでも
あえてgotoを使える様になって初めて初心者を卒業では?
まあ漏れは制御系だからアプリ系とは違うと思うが。
0837仕様書無しさん
NGNG0838828
NGNG>goto使用一律禁止をルールで決定されているという前提で記述されていると思える点。
構造化フロー制御はかくあるべきであるとダイクストラさんが決めたんだって。
>そのようなルール下での開発しか世の中には存在しないという前提で記述されていると思える点。
それは深読みしすぎっす。
あくまで構造化フロー制御というルールが前提である場合の話っすから。
それとも構造化フロー制御からひっくり返します?
>仮にgotoに付いてのルールが「極力使用しない」であった場合、gotoを使用することにより発生する(かも知れない)
>小さな混沌が、大きな混沌に変化することに対する有効な予防策が存在しないことを前提に記述されていると思える点
一文が長いっす。文章も`Divide and conquer!!'でお願いしますよ。
で、その曖昧な事象に対する具体的な予防策はあるんですか?
0841124
NGNG>構造化フロー制御はかくあるべきであるとダイクストラさんが決めたんだって
>>124と>>804がレスです。
>それは深読みしすぎっす
失礼しました。
>それとも構造化フロー制御からひっくり返します?
はい。「構造化フロー制御」は全能ではありません。>>124がレスです。
>一文が長いっす。
失礼しました。
>具体的な予防策はあるんですか?
こちらが答えるべきであるかどうか・・・は別として、
コードレビュー/ウォークスルー/インスペクション等でしょう。
「言うことが古い」かも知れませんが。
#なんか私が苛めてるみたいなやり取りになってしまいましたね。ごめんなさい。
0843仕様書無しさん
NGNGこれだけ忘れんといてね。
0844仕様書無しさん
NGNG0846仕様書無しさん(843)
NGNG一緒だろーがっ!眠いのに揚げ足とんな、簿毛!
0848843
NGNG>一般に、12歳以上になってBASIC を書くプログラマはいない。
えーと。。。僕はまだ11歳だからへっちゃらだねっ!
つーか、845市ね!!!
0849仕様書無しさん
NGNG要するに自分が「本物だ」と思い込んでいるやつこそニセもので
滑稽なものだって言いたいための。
0850仕様書無しさん
NGNG自分のコードが完璧であるという自信が無いから、バグを出さないように慎重に組むし、
スケジュールを守れる自信が無いのでツールを駆使して作業効率を上げるよう努力し、
自分の知識に自信が無いから常に新しい言語や技術を覚えようとします。
自信たっぷりなプログラマはたいがいが初心者。
0851仕様書無しさん
NGNG成ります、このスレはゴミばかりですね!!!
0852仕様書無しさん
NGNGある時期から
unixは ど素人がプログラムを
書くようになったみたいだな
0853仕様書無しさん
NGNG0854仕様書無しさん
NGNGインデントが違うだけだよね?それが重要なの?
0856仕様書無しさん
NGNG問題は、そういったソースを見れる機会が少ない事かな。
0857仕様書無しさん
NGNGお前OSを描けるのか?アプリしか出来ないゴミが
OSの批判をするのはお笑いだよ。
0858仕様書無しさん
NGNGお前バカか?ソースなんか山の様に有るだろう、
MSしか知らないのか???
0859仕様書無しさん
NGNGOS書くにはパフォーマンス上gotoが必要かもしれないが、
ソースを書く側も読む側も承知してるからok。
でも、一般には違うべ?
0860856
NGNG山のように有るのか。教えてくれてありがとう。
ついでに紹介してくれるとありがたいんだけど。
gotoの使い方に賛同出来るソースを。
0861仕様書無しさん
NGNGということはこういう馬鹿がgotoを使うのか
せっかくだから今日から後藤と名乗れや(w
0862仕様書無しさん
NGNGお前らミタイな素人とは話が合わないわけだwww
0865仕様書無しさん
NGNG0866仕様書無しさん
NGNG一般の意味がお前らのようなアマグラマーを指すのであれば
そのとうりだな、VC++でゴミ・アプリでも作ってろ。
>>860
自分で作れ!!!
>>861
お前のようなバカは放置だな。
0867仕様書無しさん
NGNG誰でも出来ることを自分しか出来ないと思ってる
カワイソウ
残念だけどプログラムなんて普通の頭の奴がちょっと勉強すれば誰でも出来ることよ?
0868仕様書無しさん
NGNG0869仕様書無しさん
NGNG学生の間はこんな所で遊んでないで、しっかり勉強しなさい。
0870仕様書無しさん
NGNG0871仕様書無しさん
NGNGgotoが悪い訳じゃない
gotoを安易に使うバカが悪い
0872仕様書無しさん
NGNGgotoを予約語にして将来の拡張の可能性を残しました。
でも、gotoなんか要らないってことに利用者が気付いてくれたたから、
永遠にgotoは予約語のままなのです。めでたしめでたし。
0873仕様書無しさん
NGNGお前玄人童貞だろ、gotoした時の快感を知らないなんて
可哀想だなwww
0874後藤
NGNG0876仕様書無しさん
NGNGこんなもん使うならif〜breakに置き換えるよ。
0877仕様書無しさん
NGNGそろそろ統一した規格がほすいんだが。でもtabは4にしてね・・・
0879仕様書無しさん
NGNG漏れはリナックスもVスタジヲで作っているおバカなんだよ!!!
tabは絶対4に汁、これは漏れのお願いだよ。
0880仕様書無しさん
NGNG何?空白を使っている?
「ちょっとハンドル持っててくれ」
ぱきゅーんぱきゅーん>>>>>>879
ばたっ。
「よし」
0881仕様書無しさん
NGNGbreak;、contenue;を使わず処理2にを処理したいときにgotoを使うなもれ。
//ループ1
while(){
//ループ2
while(){//
if()goto koko; //★
}
・・・処理1
koko:
・・・処理2
}
ループ2をてっとり早く抜け出す方法ってあるのかな?
また、ループ2内のcontenue;はループ1の先頭になるのだっけ?
0882仕様書無しさん
NGNGfunc(){
while(){
//ループ2
while(){//
if(){
・・・処理2
return;
}
}
・・・処理1
・・・処理2
}
}
0883仕様書無しさん
NGNG条件として、
処理2をしてもループ1を終了する判断材料にはならない。
0886仕様書無しさん
NGNG0889仕様書無しさん
NGNG見たいな命令が無いのはなでだろ。
あってもおかしくないよな。
0890仕様書無しさん
NGNGマ板のあほ達ですから(´,_ゝ`)プッ
0892仕様書無しさん
NGNGfor(){
for(){
breakto hoge;
}
}hoge:
の方がわかりやすくないか?
0893仕様書無しさん
NGNGインテンションプログラミング!
0894仕様書無しさん
NGNGアセンブラと同じにすればイメージ悪くない
0895仕様書無しさん
NGNGそれ、いいな。ループにラベル付けてラベルをしてして抜ける。
特定の条件でループをまたいで抜けたい場合なんかに使えそうじゃないか。
そうすれば奇妙な goto + ラベル は少なくなるんじゃないか。
0896881
NGNGループ2を抜けてもループ1は抜けてほしくない場合のことをいってる。
0897仕様書無しさん
NGNGwhile(){
if(){
flag = 0;
break;
}
}
if(flag){
処理1
}
}
0898仕様書無しさん
NGNG漏れの場合、そういう場面に出くわしたら、
while(){//
if()goto koko; //★
}
を別の関数に分けて、戻り値で条件分岐だな。もっとも while() の中身によるが。。
20step を超えるようだと別関数、それ以下ぐらいなら goto を使う。
0900仕様書無しさん
NGNGデジタル信号処理でもgotoは使わんな
0901仕様書無しさん
NGNG基礎にもどりましょう
フローチャート書いて
gotoが無くなるように考えてみましょう
0903仕様書無しさん
NGNG0904828
NGNGあんたの言ってる事はつまりこういう事だ。
強姦は最初から存在します。
その後、宗教を皮切りに、風習や文化により
「人類の繁殖は和姦で済ませることが可能である」
と思われるようになりました。そして数多の伝道者によって婚姻制度が普及しました。
ここで指摘したいのは、誰も「和姦で済ませるべきである」
ことを証明した人はいないと言うことです。
まず強姦ありき。そののちに和姦が生まれた。
ならば和姦原理主義側が強姦を一律禁止とするべき理由を示すべきでしょう。
0906124
NGNG滅茶苦茶です。「goto使用を犯罪である」との前提で話をして、何かが得られるとお考えですか。
言い負かすためだけの理屈に見えますよ。仮にあなたが私を言い負かしても、私はgoto使用をやめるつもりはありません。
「goto使用を犯罪である」と思っているのなら「犯罪である」という理由を書いてください。
#もしかして宗教/風週/文化が成立したからときから強姦が犯罪になったと同様に
#構造化プログラミングが成立したからときからgotoが犯罪となった。
#なんて事を書くのでしょうかね。
0907仕様書無しさん
NGNG近代化した今の言語ではgotoはただの悪だ。
原始的な社会においては対して悪いことではない。
原始的な言語においては対して悪いことではない。
C言語は近代化した言語とはいえないが。どちらかといえば原始的な言語だろう。
つまりCでgotoを使うのは必要悪ということさ。
マサイの戦士たちに、都会の慣習をムリヤリ押し付けるなんてのは愚の骨頂さ。
0908仕様書無しさん
NGNGクビリコロサレテシマイマスカラネ
0909仕様書無しさん
NGNG0910仕様書無しさん
NGNGていうか
アセンブラのほうが構造化は大切だぞ
0911仕様書無しさん
NGNG0912仕様書無しさん
NGNGこれなら明示的かつ論理的かつ直感的だし。可読性下がりようが無いからバグもでない。
0915仕様書無しさん
NGNGうまい棒6本の金額(税抜)を求めるのに、(10*6)と書かれたら
理解できない人もいるから、10+10+10+10+10+10と書くべきだ、
といっているように見えるのだが…。
6本なんだからいいじゃないか、というのもまぁ現実かもしれませんが、
100本に変える可能性がある場合に、どれくらい検査・保守のコストが
違うかを考えると、加算しか知らない人のことを考慮するのではなく
乗算を勉強する(させる)のが必要なのではないかと。
#かく言う俺も「乗算」勉強中(w
#>>824のコード、勉強になりました
0919仕様書無しさん
NGNG0920仕様書無しさん
NGNG関数の引数にポインタ渡して処理させるか、直接実行させるか
なんて細かい事は気にするな。
俺はとにかく、あのような処理が好きなのだ。
もっと複雑で例え資料がないと解読不能であっても
そんな事は関係ない。
関数ポインタマンセー
0921仕様書無しさん
NGNGまだよく理解していないみたいだな(w
まぁ、いい。ああいうコードを美しいと思う感性自体はそれほど悪いものじゃない。
ところでああいう処理が好きなら、lisp 系の言語(できれば scheme )を学ぶと良い。
(最初は「何だ?これ」と思うかもしれないがな)
驚天動地の世界がお前を待っている。
0922仕様書無しさん
NGNG0923仕様書無しさん
NGNGど素人が見てもわかるコードを書くという意識をもてるかもてないかで
香具師の今後は決まるな。
0924仕様書無しさん
NGNG0925仕様書無しさん
NGNGこういうこと言う奴って自分の感性が鈍っただけ、とは考えないのかね。
ムダに年齢を重ね、意味の無い経験を積んじゃった奴がよく言うんだコレ。
それを成長したからとそう思うようになったんだと錯覚してやがる。
0926仕様書無しさん
NGNG画面表示をするプログラムなんか
画面を構成するオブジェクトの配列を作って
そいつを処理するプログラムに配列を渡すだけだが
プロでも初めてコードを見ただけでは、
何をしてるかすぐにはわからないが、
配列の作り方さえ判れば、非常に簡単なのだが
0928仕様書無しさん
NGNG他人には読めないコードを書いて優越感と共に切り札を得る
馬鹿正直に人類みなみなよくしましょうとか教育されてる日本人はこういう点でやさしいが愚かしい
0929仕様書無しさん
NGNG次のプロジェクトに移っても何度も電話で呼び出されてる馬鹿。
「君のコードは頭が悪いな。新人が書き直したら半分で済んだよ」
0931仕様書無しさん
NGNG簡単なコードのほうが簡単に金儲けできるし。
0932仕様書無しさん
NGNG次のプロジェクト? 大丈夫その都度会社移るんだからさ
電話で呼び出されたら商談のチャンスじゃないか。
だいたい俺の仕事先の新人じゃ俺のコードは書きなおせない。
なにせB木どころかニュートン法でさえ書けない奴ばかりだからさ。
0933仕様書無しさん
NGNGたとえば、 x の符号によって p[0] か p[1] のどちらかを採用するコードなら
p-( (-x) >>32)
てな調子さ。
min/maxは大好きだ。 DSP用には専用命令もあるからパフォーマンスもいい。
だから、俺の書いたC はスッキリしてるぞ。 でも、読める奴は殆どいないけどな。
0935仕様書無しさん
NGNGそこだけインラインアセンブラ使わないとならなくなる。
0936仕様書無しさん
NGNG最近の言語はどうなんだろ。
例えばT-SQLだと、下手に分岐結果が得られる計算式を与えるよりも、
CASE文使った方が演算が速かったりする。
0937仕様書無しさん
NGNGCでCASE文を使うと各処理へのジャンプテーブルが作られてしまうので、
ELSE-IFで書いた方が早いよ。(コンパイラに拠って違うかも知れないけど)
0938仕様書無しさん
NGNG0939828
NGNG>滅茶苦茶です。「goto使用を犯罪である」との前提で話をして、何かが得られるとお考えですか。
あんたの人格を攻撃するつもりはないが、ちょっと被害妄想じゃないか?
誰もgoto使用(強姦)は犯罪だなんていってない。
構造化(和姦)はルールだ、と言っている。
人間が下等動物ではなく知的生命体として生きていく上で必要なルールな。
0941仕様書無しさん
NGNGプロセッサてなあにプリ・プロセッサの事?
0943仕様書無しさん
NGNGそんなに変わらないのでは?
0944仕様書無しさん
NGNGこれはタイミングを検証する段階に入るとその都度全部のルート
を通る検証データを用意しなければならなくなり、とても厄介。
だから、goto より if や case の方が悪。
0946仕様書無しさん
NGNGそこまでシビアなタイミングて何?OSは無さそうだね。
0947仕様書無しさん
NGNG最適化のレベルを上げるとそうだね、でもLinuxはあんまり上げると
動かなくなる罠があって上げられないんだよね・・・
0948124
NGNGどうも話の前提の認識に不一致があるようですね。
あなたは「構造化がルール」だと言っている。
私は「構造化は基本ではあるが、goto使用がbetterである(と判断する)ときも
稀ではあるが確実に存在するのでgoto一律使用禁止には反対する(構造化をルール化することに反対)」
だと言っているのです。
「構造化がルール」を前提に話をされては、話が噛み合わないのが当然です。
この意見の不一致についての見解をどうぞ。
#構造化がルールだと思っているのなら、「なぜgotoについてのスレに来るのか」が理解出来ないのですが。
0949仕様書無しさん
NGNGvolatileの宣言なんかが抜けてるのかな
0950828
NGNG言葉がかみ合ってないかもね。
私の中では構造化がルール(法則)なのであって、
構造化をルール化する(法律のようにするという意味?)
かどうかは問題ではないと思う。
あるのは構造化に従うのか、従わないのかの2択であって
基本的に構造化に従うが、都合に応じて構造化以前の方法を持ち出すというのは
構造化という法則(ルール)に反すると思う。
> 構造化がルールだと思っているのなら、「なぜgotoについてのスレに来るのか」が理解出来ないのですが。
ルール違反者の意見にも耳を傾けていかないと、自分の信じるルールのバランスを取りつづける事ができないから
0953仕様書無しさん
NGNGそらぁ1000ステップの関数中にラベルが複数出てきたら読みたくない罠。
100ステップ以下の関数中に1ラベルなら goto 使っても何の問題も無いと思うんだが。
0954仕様書無しさん
NGNG細かいことにこだわりすぎて、大局を見る能力が無いというか。
0955仕様書無しさん
NGNG0956仕様書無しさん
NGNG> goto 使用禁止って言う奴にかぎって1関数がでかいんだよなぁ。
妄想だな。
> 100ステップ以下の関数中に1ラベルなら goto 使っても何の問題も無いと思うんだが。
何を根拠に言っているのだ?
0957仕様書無しさん
NGNG0958仕様書無しさん
NGNG0959仕様書無しさん
NGNG0960仕様書無しさん
NGNG妄想じゃなく経験則だよん。
100ステップ以下なら読みたくないソース書くの難しいだろ。
0961仕様書無しさん
NGNG0964仕様書無しさん
NGNG100以下くらいで話さないと批判される事が多いんだよねぇ。
0965仕様書無しさん
NGNG1ステップ(命令では無いよ)処理が増えてしまうんだよ。
むかし確認したので最近は違うかも・・・Cを使う場合は
そんな事を気にするより判りやすい書き方をするべきだね、
後はコンパイラに任せって。もうgoto問題は飽きた。
0968仕様書無しさん
NGNG遅くなってしまいます、でも最近のCPUはパイプラインも複数有るし・・・
>>967さんの仰るとうりです、昔逆アッセンブラ等を作っていたもので。
0969124
NGNG「議論をするつもりはない」とのお考えだと判断して良いですかね。でしたらもうやめましょう。
私はあなたの言う「違反者」ではありませんよ。
私は構造化がルールとして明文化されているところでは、そのルールに従うと>>835で
表明しています。もちろん「明文化されていないのならルールそのものが無い」と判断しますが。
>124のコピペをしてレスに変えます。
>構造化プログラミングは万能かも知れないですが、
>全ての場合において最適解であるかというと、私は懐疑的です。
0971124
NGNG実力ってなんですか?。「goto無しでは書けないんだろ」って事ですか?
>>700も同時に書いていることを知っての上での発言ですか?
あれだけ沢山、他の方が「俺ならこう書く」って自分のソースをさらしているのは、
「私が全く力が無いから教え諭してくれている」と考えているんですか?
0972仕様書無しさん
NGNGリカーシブで書けよ
0974仕様書無しさん
NGNG5年4組 坂崎竜太
ぼくはうめるということが大好きです
いらなくなったスレとかをうめます
スレっていうのはスレッドのことです
他にもいらなくなったものはうめることにしています
スレッドじゃないものは土にうめます
スレッドの他にうめたのはノートとかブロッコリーとか
いもうととかです
土をほるのが楽しいです
ほった穴にうめるものを投げるのが楽しいです
入れたものに土をかぶせるのが楽しいです
うめ終わった後はぼくしか知らないヒミツが
できたみたいでわくわくします
これからもいろんなものをうめたいと思います
おわり
0975124
NGNGいやどうもみなさん楽しい時間をありがとうございました。
私は構造化言語が一般に使用されていない時代からのoldプログラマです。fortran66が母国語です。
だからgoto使用には抵抗がありません。
ですが構造化構文をサポートするfortran77となっても、あいも変わらずgotoを多用/誤用する人間も多く、
「いつか必ずgotoレスが主流になる時代が来るに違いない」と考えていました。これはつい昨日の事の様です。
勝手に総括させてもらうと。
gotoを全面禁止とする方がスパゲティが発生する危険性がなくなるから良い。
gotoを使いたいという人間は確かにいるが、(いるか?)総合的に判断しても禁止するのが良い。
という見解の方が沢山おられる様ですね。これは
「gotoの誤用をする人間に開発/保守をやらせるという疾患」
に対する対症療法にしか過ぎないのです。対症療法だけでは治療になりません。正しい治療方法は
「開発/保守をやらせる人間をgotoの誤用をしないスキルに教育する」ではないでしょうか。
まあ何が誤用で何が誤用でないかを定義するのも一筋縄ではいかないのですが。
gotoの誤用をしない人間ばかりの開発/保守ならばgotoについてのルールは不要となるはずです。
「そんなことをする時間も金もない」という方には「ご愁傷様」と回答します。
とはいえ、ダイクストラが例の論文を書いて以来、綿々と続けられているgoto論争に
終止符を打つ。などという大それた事は考えておりません。
まあ「言いたい事を言ったから満足」というくらいの心境です。
ではみなさんいずれまた。
0976仕様書無しさん
NGNGCでgotoを使わない理由を考察するスレ goto loop2;
http://pc.2ch.net/test/read.cgi/prog/1070196585/
0977828
NGNG>「議論をするつもりはない」とのお考えだと判断して良いですかね。
つもりがなかったらそもそもこのスレに書き込んでいないわけですが。
>私はあなたの言う「違反者」ではありませんよ。
ですね。はじめから法の外にいるという立場のようですから。
>構造化プログラミングは万能かも知れないですが、
>全ての場合において最適解であるかというと、私は懐疑的です。
だから、いいか、悪いかではなくて
慣例、習慣、法律などの決まりごとにそって生きるのが人間で、その方が生き易い。
多少融通が効かない事はあるだろうけど、世の中の全ての人が大岡越前になれるわけではない
(と私は思っているのですが、あなたに言わせると「ご愁傷様」らしいですね。
あなたは世界中の裁判官が大岡裁きができるとお考えですか?)
でもまあ、私の経験だと、これくらいやり込められるとほとんどのナナシは
自作自演やら荒らしやらのアンフェアな方法に出る2ちゃんで、
正々堂々と意見と意見の戦いで通された事は感謝と尊敬の念を感じました。
後輩から教わった話ですが、年寄りというのは
若者に理解されない話を頑なにすることで、若者の中の新しい文化への
情熱や信念を強固にさせる役割もあるんだそうです。
いつまでも頑なな頑固ジジイであれ!>>124
0978仕様書無しさん
NGNGgotoを使うことがベストな場合も存在するってことでいいですね。
0980仕様書無しさん
NGNGCにはgotoという便利な言語仕様があるんだから使えばいいだろ。
それがイヤならgotoなど無い言語を選択するんだな。
0982仕様書無しさん
NGNGリファクタリングのときに大変だからじゃないの?
if (hoge) {
...
goto fuga;
}
とかやってると、関数に外出しするときに { } の中だけ別関数にすればいいけど、
goto 文が入ってるとすっきり行かないもんね。
0983仕様書無しさん
NGNG0985仕様書無しさん
NGNGもちろん。それもやめた方がいい。
0986仕様書無しさん
NGNG中出しは危ないですよ。
0990仕様書無しさん
NGNG0991仕様書無しさん
NGNGDim lCnt As Long, sLoop As String, bQuot As Boolean, sNewSource As String
MsgBox "テストしてませんがよろしいですか?", vbOKOnly
Do Until lCnt > Len(Source)
lCnt = lCnt + 1
sLoop = Mid(Source, lCnt ,1)
If sLoop = """" Then
If bQuot = True Then
bQuot = False
Else
bQuot = True
End If
End If
If bQuot = True Then
DeleteCComment = DeleteCComment & sLoop
Else
Select Case Right(DeleteCComment, 1) & sLoop
Case "//"
DeleteCComment = DeleteCCommentBs(Source)
lCnt = InStr(lCnt, Source, vbCrLf) - 1
Case "/*"
DeleteCComment = DeleteCCommentBs(Source)
lCnt = InStr(lCnt, Source, "*/") + 1
Case Else
DeleteCComment = DeleteCComment & sLoop
End Select
End If
Next
MsgBox "たぶんできました!"
End Function
0992仕様書無しさん
NGNGDeleteCCommentBs = Left(Source, Len(Source) - 1)
If Right(DeleteCCommentBs, 2) = vbCrLf Then
DeleteCCommentBs = Left(DeleteCCommentBs, Len(DeleteCCommentBs) - 2)
End If
End Function
0993仕様書無しさん
NGNG(誤)DeleteCComment = DeleteCCommentBs(Source)
↓
(正)DeleteCComment = DeleteCCommentBs(DeleteCComment)
0994仕様書無しさん
NGNG(誤)Do〜Next
↓
(正)Do〜Loop
0995仕様書無しさん
NGNG994 GOTO 1000
0997仕様書無しさん
NGNG0998仕様書無しさん
NGNGあ あ goto よ 我 に 希 望 を 与 え た ま え!
0999仕様書無しさん
NGNG1000仕様書無しさん
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。