C言語でintとsize_tを直接比較できますか? 質問する

C言語でintとsize_tを直接比較できますか? 質問する

int次のように変数とを比較できますかsize_t:

int i = 1;
size_t y = 2;
if (i == y) {
    // Do something
}

それとも、そのうちの 1 つを型キャストする必要がありますか?

ベストアンサー1

がゼロまたは正であれば安全ですint。 が負で、 とsize_t同等かそれ以上のランクである場合intintは に変換されsize_t、その負の値は正の値になります。次に、この新しい正の値が 値と比較されますがsize_t、(驚くほどあり得ない偶然ですが)偽陽性になる可能性があります。本当に安全(そしておそらく過剰に用心深い)にするには、まず が負でないことを確認しますint

/* given int i; size_t s; */
if (i>=0 && i == s)

コンパイラの警告を抑制するには:

if (i>=0 && (size_t)i == s)

おすすめ記事