0

私は友人と、C でいくつかの変数を正確に for ループで宣言する正しい方法は何かについて話し合っています。

彼には思い出せないコンパイラがあり、私は Dev-C++ を持っています。

彼はやる:

for (int i = 0; i<10; i++)
// ... and it works

そうです:

int i;
for (i = 0; i<10; i++)
// ... and it works

彼のようにすると、Dev-C++ でエラーが発生します。これを行う技術的に正しい方法は何ですか? 私は自分のやり方でそれをするように教えられましたが、彼は逆の方法でそれを行うので、今は混乱しています.D:

4

4 に答える 4

1

使用しているCのバージョンによって異なります。Ansi C (元の Ritchie & Kernighan) はブロックの先頭での宣言のみをサポートしていますが、最新の C (および C++ の任意のフレーバー) では、ステートメントと宣言を混在させることができます。

{ 
   int a;
   printf ("Stuff);
   int b; /* not allowed */
}
于 2013-11-06T20:44:11.213 に答える
-2

正式には、これら 2 つの物理的な違いはパフォーマンスです。for の後に括弧内に定義を入れると、レジスタのみの変数になる可能性が高くなります。しかし一方で、コンパイラの解析メカニズムの助けを借りて、最適化結果の詳細を決定できる他の多くの要因があります。そのため、最終的な結果は同じであるか、逆になることさえあります。確かに違いがあります。'for' の後の括弧内で変数を定義すると、その変数はその for ループの外側では使用できなくなります。

于 2013-11-06T20:50:14.960 に答える