gpt4 book ai didi

c - 有符号与无符号比较

转载 作者:太空宇宙 更新时间:2023-11-03 23:22:53 24 4
gpt4 key购买 nike

<分区>

size_t a;
off_t b;
...
if(b<a) ...

正如预期的那样,编译器在这里发出“有符号与无符号比较”警告,因为 off_t 是有符号的而 size_t 是无符号的。有没有什么方法可以在不使用 intmax_t/uintmax_t 和预处理器条件指令的情况下在任何平台上正确地进行这种比较?

无论 sizeof(size_t) 和 sizeof(off_t) 等于多少,它都应该起作用。它们可以有任何值,例如:

sizeof(size_t)=4, sizeof(off_t)=8   (regular modern 32bit unix)
sizeof(size_t)=4, sizeof(off_t)=4 (older system)
sizeof(size_t)=8, sizeof(off_t)=4 (some 64bit system with 32bit filesystem support)

如果我只是将一个类型转换为另一个,可能会发生数据丢失和不正确的结果。

编辑 要清楚:b 的负值不是问题,因为负 b 很容易检测到 (if(b<0)),并且总是小于无符号 a 的任何值。问题是比较两种类型的正值,我不知道哪种类型的宽度更大。

EDIT2 它与“将 off_t 和 ssize_t 与其他类型进行比较”不重复,因为该问题是关于比较具有各种位宽的有符号类型,这是关于有符号类型与无符号类型;这个问题的第一个答案也没有回答这个问题,因为那个答案是关于两个相同大小的类型,这里是两个未知大小的类型;这个问题也不仅仅是关于比较,它也是关于避免警告

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com