問題タブ [goto]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
7 に答える
1839 参照

java - 役に立たないgotoを削除するJavaバイトコードオプティマイザーはありますか?

問題:8000バイトを超えるJavaバイトコードにコンパイルするメソッドがあります。HotSpotには、8000バイトを超えるメソッドに対してJITが起動しないようにする魔法の制限があります。(はい、巨大なメソッドを持つことは合理的です。これはトークナイザーループです。)メソッドはライブラリ内にあり、ライブラリのユーザーが魔法の制限を無効にするようにHotSpotを構成する必要はありません。

観察:バイトコードを逆コンパイルすると、EclipseJavaコンパイラが多くの無意味なgotoを生成することがわかります。(javacはさらに悪いです。)つまり、ジャンプからのみ到達可能なgotoがあります。明らかに、後藤にジャンプするジャンプは、代わりに後藤がジャンプする場所に直接ジャンプする必要があり、後藤は削除する必要があります。

質問:無意味なジャンプチェーンをフラット化して不要なgotoを削除するJava 5クラスファイル用のバイトコードオプティマイザーはありますか?

編集:私は次のようなパターンを意味します:

明らかに、2番目のgotoに到達するには、8701にジャンプする必要があります。これは、0に直接ジャンプする場合もあります。

2回目の調査では、この疑わしいパターンがより一般的です。

明らかに、コンパイラーが「等しくない」比較を「等しい」比較に逆にし、8704にジャンプして、gotoを削除するようにしたい場合。

0 投票する
5 に答える
1465 参照

c - エラー処理に C switch ステートメントを使用する

実際の作業を行う前にエラーをチェックする次の C コンストラクトを検討してください。

これを読みやすいと思いますか?goto使用または積み重ねた代替案はif()より良いでしょうか?

0 投票する
6 に答える
314 参照

string - これを書き直して、速度や読みやすさを損なうことなく goto を削除するにはどうすればよいでしょうか?

私はこれを書きました。はい、私はそれがVB6であることを知っています。はい、それは製品コードであり、goto を使用していることはわかっています。私は怠け者で邪悪な獣です...

だから私に(そして私たちの残りの人たちに)それがどのように書かれるべきかを見せてください

ちなみに、これは文字列を配列に分割します。文字列内の要素は引用符で囲むことができます。

0 投票する
6 に答える
6706 参照

c++ - goto を使用して 2 つのループから抜け出す正当な方法はありますか?

Project Eulerの問題 9 を解決しています。私のソリューションでは、「goto」ステートメントを使用して 2 つの for ループから抜け出します。問題は次のとおりです。

ピタゴラスのトリプレットは、3 つの自然数 abc のセットです。

a^2 + b^2 = c^2

たとえば、3^2 + 4^2 = 9 + 16 = 25 = 52 です。

a + b + c = 1000 であるピタゴラスの 3 連符が 1 つだけ存在します。積 abc を見つけます。

私の解決策はC ++にあります:

「goto」ステートメントは C++ プログラマーの間ではあまり一般的ではないため、これが「goto」の合理的な使用法と見なされるかどうかを知りたいです。または、「goto」を必要としない問題のより良い解決策がある場合。これは、単に「goto」を回避するソリューションではなく、アルゴリズムを改善する方法で「goto」を回避するソリューションを意味します。

0 投票する
3 に答える
364 参照

delphi - ブロックから飛び出すときにスタックベースのコードをクリーンアップする安全な方法はありますか?

私はPascalScriptスクリプトエンジンのIssue14に取り組んでいます。この場合、Gotoコマンドを使用してCaseブロックからジャンプすると、完全に有効な(醜い場合)Object Pascalコードであっても、コンパイラエラーが発生します。

コンパイラのProcessCaseルーチンがHasInvalidJumpsを呼び出していることがわかります。これは、Caseブロックの外側につながるすべてのGotoをスキャンし、見つかった場合はコンパイラエラーを返します。そのチェックアウトについてコメントすると、コンパイルは問題なく実行されますが、実行時にクラッシュすることになります。バイトコードを逆アセンブルすると、その理由がわかります。元のスクリプトコードで注釈を付けました。

「gotoL1;」103のステートメントは、113と114のクリーンアップポップをスキップし、スタックを無効な状態のままにします。

Delphiは計算スタックを使用しないため、これに問題はありません。ただし、PascalScriptはそれほど幸運ではありません。このパターンは、PascalScriptに変換した制御構造がほとんどなく、サポートできる必要がある、はるかに単純なシステムの一部のレガシースクリプトで非常に一般的であるため、これを機能させる方法が必要です。

スタックを適切にクリーンアップするためにcodegenにパッチを適用する方法を知っている人はいますか?

0 投票する
13 に答える
14474 参照

c - while(1)..gotoの代わりにbreak

Cプログラムで次のコードを見つけました。

ここでwhile(1)は、「finally」のローカルエミュレーションとして使用されます。sを使用してこれを書くこともできますgoto

gotoソリューションは通常のイディオムだと思いました。私はカーネルソースでこのイディオムのいくつかの出現を見てきました、そしてそれはDiomidisSpinellisの「CodeReading」本でも言及されています。

私の質問は:どの解決策がより良いですか?while(1)ソリューションを使用する特別な理由はありますか?

質問943826は私の質問に答えません。

0 投票する
4 に答える
89678 参照

matlab - MATLAB のジャンプ コマンド

MATLAB の m-file エディターを使用していて、ある行から別の行にジャンプする必要があります。For...の中からジャンプする必要がある場合end、通常の「while」手法は使用できません。C
のように、行から別の行にジャンプする方法はありますか?goto

0 投票する
3 に答える
1149 参照

c# - C#パズル:到達不能なラベルを指す到達可能なgoto

この投稿からのEricLippertのコメントは次のとおりです。

答えがわかったので、このパズルを解くことができます。到達不能なラベルに到達する到達可能なgotoがあるプログラムを作成してください。– EricLippert7月17日7:17

到達不能なラベルを指す到達可能なgotoを持つコードを作成できません。それも可能ですか?はいの場合、C#コードはどのようになりますか?

注:「goto」がどのように悪いかなどについては議論しないでください。これは理論的な演習です。