私はそれが悪いと読みましたGOTO
が、どうすればそれを避けることができますか? なしでプログラミングする方法がわかりませんGOTO
。BASIC ではGOTO
、すべてに使用しました。C および C++ では代わりに何を使用すればよいですか?
私はGOTO
このようにBASICで使用しました:
MainLoop:
INPUT string$
IF string$ = "game" THEN
GOTO game
ENDIF
Edsger Dijkstra は、 Go To Statement Considered Harmfulというタイトルの有名な手紙を発行しました。あなたはそれについて読むべきです、彼は構造化プログラミングを提唱しました. そのウィキペディアの記事では、構造化プログラミングについて知っておくべきことが説明されています。goto を使用して構造化プログラムを作成することはできますが、最近では一般的な見方ではありません。その観点から、Donald Knuth の構造化プログラミング with goto ステートメント を参照してください。
goto
、などfor
、読みやすい他のプログラミング構造に置き換えられました。しかし、まだ用途があります。関数内のさまざまなコード ブロック (たとえば、さまざまな条件チェックを含む) が単一の終了点を持つ状況で使用します。この 1 つの用途とは別に、適切なプログラミング構造を使用する必要があります。while
do-while
goto
多分代わりに
if(something happens)
goto err;
err:
print_log()
使用できます:
do {
if (something happens)
{
seterrbool = true;
break; // You can avoid using using go to I believe
}
} while (false) //loop will work only one anyways
if (seterrbool)
printlog();
上記の例では goto が 1 つしかないため、友好的ではないように見えるかもしれませんが、多くの "goto" があると読みやすくなります。
上記の関数のこの実装は、goto の使用を回避します。これにはループが含まれていないことに注意してください。コンパイラはこれを最適化します。私はこの実装を好みます。
「break」と「continue」を使用すると、goto ステートメントを (ほとんど?) 常に回避できます。
int foo()
{
int fd1 = -1;
int fd2 = -1;
int fd3 = -1;
do
{
fd1 = open();
if(fd1 == -1)
break;
fd2 = open();
if(fd2 == -1)
break:
fd3 = open();
if(fd3 == -1)
break;
... do your stuff here ...
}
while (false);
if(fd1 != -1)
closefile();
if(fd2 != -1)
closefile();
if(fd3 != -1)
closefile();
}