首頁 >後端開發 >C++ >C 的 if 表達式可以跨標準和編譯器一致地處理變數宣告嗎?

C 的 if 表達式可以跨標準和編譯器一致地處理變數宣告嗎?

Barbara Streisand
Barbara Streisand原創
2024-11-27 13:26:12526瀏覽

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。

此限制對於條件內只需要一個聲明的場景來說很不方便。

C 17 解決方案

C 17 對此引入了解決方案問題:

if (int a = Func1(), b = Func2(); a && b)
{
    // Do stuff with a and b.
}

此語法使用分號(;) 將聲明與條件分隔開。它允許在一個條件內聲明多個變量,消除了先前的不便。

以上是C 的 if 表達式可以跨標準和編譯器一致地處理變數宣告嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn