gpt4 book ai didi

c - 如何告诉编译器 #define 的 "range"(-Wtype-limits 警告)

转载 作者:行者123 更新时间:2023-12-04 11:58:24 26 4
gpt4 key购买 nike

在我的代码中,我需要饱和一个变量 uint32_t var范围内[MIN, MAX] .MINMAX被定义为宏,因此我可以在头文件中轻松更改这些值。
标题:

#define MIN    (0)
#define MAX (1000)
代码:
if(var > MAX){
var = MAX;
}else if(var < MIN){
var = MIN;
}
当我现在使用编译器标志时 -Wtype-limits ,我收到第二次检查 var < MIN 的警告总是假的。此警告表明我可以删除第二个比较。
只要我定义 #define MIN (0),这就是有意义的但是,当将此更改为让我们说 #define MIN (10) 时,那么第二次比较是强制性的。
所以我的问题是:我怎么能告诉编译器, MIN可以是大于或等于零的任何值吗?

最佳答案

最简单的解决方案就是 use <= instead of <

if (var >= MAX) {
var = MAX;
} else if (var <= MIN) {
var = MIN;
}
但是如果可能的话,你应该避免使用宏,而只声明常量。此外总是使用 U使用无符号值时使用后缀以避免有符号无符号不兼容警告。事实上,如果我使用 #define 很有趣。就这样我得到了一个 warning in GCC but not Clang ,当我更改为 const并添加 U后缀然后我得到 no warning with GCC but one with Clang

关于c - 如何告诉编译器 #define 的 "range"(-Wtype-limits 警告),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68921206/

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