ホームページ > バックエンド開発 > C++ > C の「if」ステートメントは複数の変数宣言を処理できますか?

C の「if」ステートメントは複数の変数宣言を処理できますか?

Patricia Arquette
リリース: 2024-11-27 17:58:14
オリジナル
720 人が閲覧しました

Can C  's

「if」式の変数宣言: 標準とコンパイラの癖

問題

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 を含む多くのコンパイラでは制限が適用されます。

  • 括弧で宣言を囲むことはできません。
  • 宣言は 1 つにつき 1 つだけ許可されます条件.

さらに厄介な例

この制限は、条件内で複数の変数を宣言し、それらに特定の値を割り当てる場合に特に厄介になる可能性があります。

bool a = false, b = true;
if (bool x = a || b) { ... }
ログイン後にコピー

x を false に設定して「if」本体を入力するには、宣言を括弧で囲む必要があります。ただし、括弧は許可されていないため、x は本体の外で宣言する必要があり、より広い範囲に漏れます。

結論

C 17 より前では、「if」での複数の変数宣言に必要な構文「条件が規格に適合していませんでした。ただし、コンパイラはさらに制限を課すことがよくあります。

C 17 の解決策

ありがたいことに、C 17 では、この問題を解決する新しい構文が導入されました。

if (int a = Func1(), b = Func2(); a && b) { ... }
ログイン後にコピー

C 17 では、セミコロンを使用して宣言と実際の条件を区切ることができるようになり、複数の変数宣言と括弧を使用できるようになりました。

以上がC の「if」ステートメントは複数の変数宣言を処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート