3

ほとんどの C 派生言語 (C、Java、Javascript など) では、forループの基本的な構文は同じです。

for (int i = 0; i < 100; i++) {
    // code here
}

セミコロンは通常行末に予約されているのに、なぜこの構文にはセミコロンが含まれているのですか? また、なぜ の後にセミコロンがないのi++ですか?

4

6 に答える 6

11

この疑似コード:

for (A; B; C) {
    D;
}

に内部変換できます。

{ // scope bracket
    A;
    while (B) {
        D;
        C;
    }
}
于 2013-05-06T21:26:41.200 に答える
2

セミコロンは行末ではありません。エンディングの指示です。これらの言語のほとんどで、次のことができます。

int i;i = 0;

そしてそれは合法です。縮小された Javascript コードを探します。1 行に何千ものセミコロンが表示されます。

同じ原則により、for ブロックは 3 つの命令を受け取ります。コンパイラまたはインタープリタが各コマンドの開始位置と終了位置を認識できるように、コマンドはセミコロンで区切られています。

これは完全に合法です (ただし、無限ループになります)。

for (;;) {}
于 2013-05-06T21:26:51.450 に答える
1

for(;;){}おそらく、この特定の構文が生まれた理由についての合理的な説明はありません。それについては、カーニハンかリッチーに聞いてください。

プログラミング言語の歴史を最初の 60 年代にさかのぼると、中括弧は BCPL プログラミング言語に現れた可能性がありますが、括弧は条件を囲む B によって美化されていました (これにはwhileステートメント noしかありませんでしたfor)。C は B をモデル化したものです。

1972 年以来、C はコンピューター エンジニアリングのすべての分野に浸透し、確立されたプログラマーの習慣を混乱させないように、多くの場合 C 構文 (C++、Java、Javascript、C#、Scala など) をモデルにしたその後の言語に浸透してきました。これには、for(;;)ループ構文と中括弧が含まれます。

補足として、Python など、C スタイルの構文に頼らない広く普及している言語が多数あります。そのforループには、より多くのロジックが含まれている可能性があります (明らかに、これは個人的な意見です)。

于 2013-05-06T21:44:08.260 に答える
0

一般的な形式は次のとおりです。

for ( expression; expression; expression ) { ... }

これらの式の構文は「通常の」式の構文と同じであるため、パーサーはこれらの式を簡単に認識できます。

{
    expression;
    expression;
    ...
}

最後の式は ')' で終わるため、簡単に認識できます。さらに、コンマは単一の式の中に入れることができるため、使用できませんでした:

for ( i=1,j=10; i<10,j>0; i++,j--) { ... }
于 2013-05-08T16:11:43.937 に答える