gpt4 book ai didi

C 比较 'x < 0' 其中 'x' 的类型是任意的,即可能是无符号的

转载 作者:太空宇宙 更新时间:2023-11-04 01:16:45 26 4
gpt4 key购买 nike

给定:

定义为 TheValueT 的类型,可以任意配置,例如作为 uint8_tint64_。让有一些代码:

TheValueT   x = ...;

... do something to 'x' ...

if( x < 0 ) {
/* Do something. */
}

问题:

碰巧,如果 TheValueT 被定义为无符号类型,编译器会提示“由于类型范围有限,条件始终为真...”。

问题:

如何在让 TheValueT 仍然是任意整数类型的同时避免编译器警告?该解决方案应该适用于最广泛的 C 编译器。

最佳答案

编写测试的一种简单而安全的方法是:

TheValueT x = /* ... */;

if (x < 1 && x != 0) {
// do something
}

一个足够聪明的编译器可能无论如何都会对此发出警告,但是对于可以编写为涵盖所有可能的整数类型(包括扩展类型)的任何正确替代方案也是如此。这确实解决了我实现中的警告。

需要涉及 x 值的算术计算的替代方案在所有情况下都明确地产生正确的结果——这些在极端情况下会遇到 x 值的问题它或其他类型的范围。

这确实假设 TheTypeT 必须是 integer 类型。如果 float 类型也是可能的,那么您最好的选择可能是接受警告,或者使用编译器标志在生产构建期间关闭该特定警告。

关于C 比较 'x < 0' 其中 'x' 的类型是任意的,即可能是无符号的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56477358/

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