如何在c中清洁此线头警告?

如何在c中清洁此线头警告?,c,macros,lint,C,Macros,Lint,我有以下代码: #define NUMBER_OF_ROOMS if((unsigned int)(NUMBER_OF_ROOMS - 2) > 20) { // do something here } 但是我得到了一个lint警告:警告506:常量值布尔值,这意味着什么以及如何修复它?这意味着表达式的值是常量,因此if是无意义的,因为在编译时知道它是否为真 当然,您可以使其更具动态性,或者改用预处理器: #if (NUMBER_OF_ROOMS - 2) > 20 //

我有以下代码:

#define NUMBER_OF_ROOMS

if((unsigned int)(NUMBER_OF_ROOMS - 2) > 20)
{
   // do something here
}

但是我得到了一个lint警告:警告506:常量值布尔值,这意味着什么以及如何修复它?

这意味着表达式的值是常量,因此if是无意义的,因为在编译时知道它是否为真

当然,您可以使其更具动态性,或者改用预处理器:

#if (NUMBER_OF_ROOMS - 2) > 20
// do something here
#endif

我假设对unsigned int的强制转换是无意义的,如果这些值真的接近整数精度的边界,那么Jens Gustedt的评论适用。

这意味着表达式的值是常量,因此if是无意义的,因为编译时知道它是否为真

当然,您可以使其更具动态性,或者改用预处理器:

#if (NUMBER_OF_ROOMS - 2) > 20
// do something here
#endif

我假设对unsigned int的强制转换是毫无意义的,如果这些值真的接近整数精度的边界,那么Jens Gustedt的评论适用。

这意味着if语句的值在编译时已知


编译器只查看if 30-2>20加上不需要的强制转换,它不需要在运行时进行计算。

这意味着if语句的值在编译时已知


编译器只查看30-2>20加上不需要的强制转换,而不需要在运行时进行计算。

要正确地将其更改为预处理器计算,必须对未签名部分更加小心。预处理器应该以[u]intmax\t计算。我想像UINT_MAX&NUMBER_OF_ROOMS-2U>20这样的东西应该可以工作。要正确地将其更改为预处理器计算,您必须对未签名部分更加小心。预处理器应该以[u]intmax\t计算。我想像UINT_MAX&NUMBER_OF_ROOMS-2U>20这样的东西应该可以工作。用空宏编写这样的代码是非常不寻常的,而且会让人分心。您应该明确地将房间的数量定义为0。如果您希望它是无符号的,您应该使用2U而不是2来确保它是无符号的。使用空宏编写这样的代码是非常不寻常的,而且会让人分心。您应该明确地将房间的数量定义为0。如果您希望它是未签名的,您应该使用2U而不是2来确保它是未签名的。