ホームページ > バックエンド開発 > C++ > C の「if」式は、標準やコンパイラ間で一貫して変数宣言を処理できますか?

C の「if」式は、標準やコンパイラ間で一貫して変数宣言を処理できますか?

Barbara Streisand
リリース: 2024-11-27 13:26:12
オリジナル
537 人が閲覧しました

Can C  's `if` Expression Handle Variable Declarations Consistently Across Standards and Compilers?

C の if 式での変数宣言

C では、if 式の条件内の変数宣言の構文が制限されることがよくあります。このような制限が標準ベースなのかコンパイラ固有なのかという疑問が生じます。

2003 C 標準 (6.4.3) では、if 条件内での変数宣言が許可されており、スコープは制御されたサブステートメントまで拡張されます。ただし、宣言を囲む括弧や条件内の複数の宣言を明示的に禁止するわけではありません。

以前のバージョンの C は、括弧や複数の宣言に関して一貫性のない動作をしていました。提供されているコード サンプルでは、​​

  • if(int a = Func1()) は標準に準拠しており、if 条件内で a を宣言しています。
  • if((int a = Func1() ))) は括弧が原因でコンパイルに失敗します。
  • if((int a = Func1()) && (int b = Func2())) では、かっこがないため、if ブロックの外側で x を宣言する必要があります。

この制限は、条件内で宣言が 1 つだけ必要なシナリオでは不便です。

C 17 ソリューション

C 17 はこれに対する解決策を導入しました問題:

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

この構文はセミコロン (;) を利用して宣言と条件を区切ります。単一の条件内で複数の変数を宣言できるようになり、以前の不便さがなくなりました。

以上がC の「if」式は、標準やコンパイラ間で一貫して変数宣言を処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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