首頁 >後端開發 >C++ >在 C 和 C99 中,「bool」到「int」的轉換是否總是如預期運作?

在 C 和 C99 中,「bool」到「int」的轉換是否總是如預期運作?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-16 16:07:17545瀏覽

Will `bool` to `int` Conversions Always Behave Predictably in C   and C99?

Bool 到Int 轉換:可移植性和斷言

在C 甚至C99 中,開發人員經常利用從布林值(bool) 到整數(int) 的隱式轉換。但是,了解此轉換的可移植性和含義對於確保程式碼正確性至關重要。

考慮以下程式碼片段:

int x = 4 < 5;
assert(x == 1);

x = 4 > 5;
assert(x == 0);

這些斷言的預期輸出為何?它們保證在所有上下文中都能傳遞嗎?

Bool 到Int 轉換的可移植性

C 標準中定義了從bool 到int 的隱式轉換:

  • 對於bool,「false」轉換為0,而「true」轉換為1.
  • 對於 C99,其中 _Bool 取代 bool,true/false 是宏,適用相同的轉換規則。

此轉換是完全可移植的,並保證在所有相容編譯器中的正確行為.

評價斷言

根據轉換規則,我們可以評估斷言:

  • 4
  • 4
  • 5 的計算結果為 true,它會轉換為 1。因此,x == 1 成立。
4 > 5 計算結果為 false,轉換為 0。因此,x == 0 成立。

結論

在提供的程式碼的上下文中,斷言將會通過,因為bool 到int 的轉換是隱式執行的,並且正確分配了預期值(1 表示“true”,0 表示“false”)。然而,值得注意的是,這種行為並不限於所提供的程式碼片段,還可以擴展到使用此類轉換的任何情況。

以上是在 C 和 C99 中,「bool」到「int」的轉換是否總是如預期運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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