首頁 > 後端開發 > C++ > Bool 到 Int 的轉換真的可以跨 C 和 C99 移植嗎?

Bool 到 Int 的轉換真的可以跨 C 和 C99 移植嗎?

Mary-Kate Olsen
發布: 2024-12-07 22:25:14
原創
605 人瀏覽過

Is Bool-to-Int Conversion Truly Portable Across C   and C99?

Bool 到Int 的轉換:可移植性的詳細檢查

在某些程式設計場景中,bool 到int 值的轉換是必要的。然而,人們對其跨平台的可移植性產生了擔憂。本文對這種轉換的可移植性進行了全面的分析,解決了我們是否可以自信地期望以下斷言通過的問題:

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

x = 4 > 5;
assert(x == 0);
登入後複製

標準一致性轉換

C 中的bool 到int 轉換是由C 標準隱式定義的。根據C 11 或14 標準的§4.7/4 以及C 17 標準的§7.8/4,「如果來源類型為bool,則值false 將轉換為0,值true 將轉換為1。」這表示:

  • 斷言x == 1 通過,因為4
  • 5 的計算結果為true,它被轉換為int 值 1。
  • 斷言 x == 0 也通過,因為 4 > 5 的計算結果為 false,會轉換為 int 值 0。

因此,bool 到 int 的轉換在 C 中是完全可移植且符合標準的。

C

C99 引入了 _Bool 類型,它是一個基本整數 類型。 stdbool.h 也引進了 bool、true 和 false 巨集。 C99 標準第 7.16 節規定 true 擴展為整數常數 1,而 false 擴展為 0。因此,這些巨集的行為類似於 C 中的 bool 轉換。

結論

bool 到 int 的轉換可以跨支援 C 和 C99 或更高版本的不同平台移植。程式設計師可以放心,本文開頭所示的斷言將在兩種語言中成功通過。我們建議使用標準 bool 類型以獲得最大的可移植性和清晰度。

以上是Bool 到 Int 的轉換真的可以跨 C 和 C99 移植嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板