C の 'if' 式内の変数宣言
C では、'if' ステートメントの条件内で変数を宣言する機能制限の対象となっています。 Visual Studio 2008 を含むコンパイラでは、かっこで囲まれた変数宣言や、単一の条件内の複数の宣言で問題が発生することがよくあります。
2003 C 標準のセクション 6.4.3 によると、選択ステートメントで宣言された変数にはスコープがあります。これは、条件によって制御されるサブステートメントの終わりまで拡張されます。ただし、この標準では括弧や複数の宣言の使用については明示的に対処していません。
たとえば、次のコードはコンパイルに失敗します。
if((int a = Func1())) { // Fails to compile. }
宣言が 1 つだけ必要な場合でも、 、この制限はイライラする可能性があります。次の点を考慮してください。
bool a = false, b = true; if(bool x = a || b) { }
「if」本体スコープ内で「x」を「false」に設定するには、宣言に括弧が必要です。ただし、条件内では括弧を使用することはできないため、本体の外で 'x' を宣言することを強制され、より広い範囲に漏れることになります。
C 17 以降、この制限は解決されました。次のコードが可能になりました:
if (int a = Func1(), b = Func2(); a &&& b) { // Do stuff with a and b. }
「;」の使用「,」の代わりに宣言を条件から分離し、以前の制限を解決します。
以上がC の「if」ステートメントは条件内で変数を宣言できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。