首頁 > 後端開發 > C++ > 為什麼我在 C 中收到「有符號和無符號整數表達式之間的比較」警告?

為什麼我在 C 中收到「有符號和無符號整數表達式之間的比較」警告?

Barbara Streisand
發布: 2024-11-10 13:00:03
原創
803 人瀏覽過

Why do I get a

警告:有符號與無符號整數表達式之間的比較

簡介

練習時在「Accelerated C」中的2-3 中,使用者遇到了編譯器警告:「有符號和無符號整數表達式之間的比較」。當有符號整數 (int) 與 string::size_type(一種常用於字串長度的資料類型)進行比較時,會發生此問題。

警告原因

出現警告因為有符號和無符號整數類型具有不同的範圍。當比較這些類型時,結果可能會出乎意料。編譯器發出此警告是為了提醒程式設計師可能會出現令人困惑的結果。

建議做法

為了避免此問題,建議明確指定整數是否有符號或未簽名。將整數與字串長度或其他無符號值進行比較時,請將整數宣告為 unsigned int 或 size_t 以符合所比較的資料類型。這可確保比較產生預期結果。

範例程式碼

在提供的程式碼中,padtopbottom 應宣告為unsigned int 以符合string::size_type 變數c:
unsigned int padtopbottom;
cin >> padtopbottom;

unsigned int padsides;
cin >> padsides;

if (r == padtopbottom + 1 && c == padsides + 1) {
    // ...
}
登入後複製

附加說明
  • 透過將整數宣告為無符號,可以避免將它們與字串長度進行比較時出現意外行為的可能性。
  • 用於比較的確切類型取決於您正在使用的資料類型。
  • 在 Linux Mint 中, string::size_type 通常定義為 unsigned int,從而使比較安全。但是,明確聲明整數仍然是一種很好的做法。
「加速 C」一書確實涵蓋了與資料類型處理相關的主題,但可能沒有提供有關有符號類型和無符號類型之間的比較的全面解釋。

以上是為什麼我在 C 中收到「有符號和無符號整數表達式之間的比較」警告?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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