gpt4 book ai didi

c - 如何正确检查 off_t 值在转换为 C 中的 size_t 时不会溢出?

转载 作者:行者123 更新时间:2023-12-05 02:06:10 35 4
gpt4 key购买 nike

我需要将一个 off_t 变量转换为一个 size_t 变量,并且我想检测是否会发生溢出。在 C 中。

我最初的尝试是这样的:

off_t fsize;
size_t len;

...

if(fsize >= 0 && fsize <= SIZE_MAX) {
len = (size_t)fsize;
} else {
abort();
}

但是,编译器不喜欢我比较有符号和无符号类型 (fsize <= SIZE_MAX)。我也无法真正假设 off_t 和 size_t 类型各自的大小。

最佳答案

I can't really make assumptions about the respective sizes of the off_t and size_t types either.

要比较其可比较范围没有明确绑定(bind)的混合有符号类型,请转换为 uintmax_t


一旦代码知道signed fsize >= 0 为真,转换为宽unsigned 类型,如uintmax_t 不会缩小 fsize 值并消除警告。

if (fsize >= 0 && (uintmax_t) fsize <= SIZE_MAX) {

如果转换为 uintmax_t 的范围过宽,我希望编译器仍能生成高效代码。

关于c - 如何正确检查 off_t 值在转换为 C 中的 size_t 时不会溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62900964/

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