C では、「if」ステートメントの条件内の変数宣言は次のようになります。混乱とコンパイラの制限の対象となってきました。次のようなコード スニペットでは、よく疑問が生じます。
if (int a = Func1()) { ... } // Works if ((int a = Func1())) { ... } // Fails to compile if ((int a = Func1()) && (int b = Func2())) { ... } // Works
C 03 標準では、「if」条件での変数宣言が許可されており、スコープは条件によって制御されるサブステートメントの末尾まで拡張されます。ただし、括弧や複数の宣言に対する制限は指定されていません。
標準のサイレント許可にも関わらず、VS2008 を含む多くのコンパイラでは制限が適用されます。
この制限は、条件内で複数の変数を宣言し、それらに特定の値を割り当てる場合に特に厄介になる可能性があります。
bool a = false, b = true; if (bool x = a || b) { ... }
x を false に設定して「if」本体を入力するには、宣言を括弧で囲む必要があります。ただし、括弧は許可されていないため、x は本体の外で宣言する必要があり、より広い範囲に漏れます。
C 17 より前では、「if」での複数の変数宣言に必要な構文「条件が規格に適合していませんでした。ただし、コンパイラはさらに制限を課すことがよくあります。
ありがたいことに、C 17 では、この問題を解決する新しい構文が導入されました。
if (int a = Func1(), b = Func2(); a && b) { ... }
C 17 では、セミコロンを使用して宣言と実際の条件を区切ることができるようになり、複数の変数宣言と括弧を使用できるようになりました。
以上がC の「if」ステートメントは複数の変数宣言を処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。