如何在C中删除以下lint警告?

use*_*316 5 c loops lint

我有以下代码:

#define NUM_DAYS 65
#define NUM_PERSON 33

int num = 0;

if(NUM_DAYS % NUM_PERSON)
{
    num = NUM_DAYS / NUM_PERSON;
}
else 
{
    uum = NUM_DAY / NUM_PERSON + 1;
}

num = num - 1;

while(num > 0)
{
    //do something here
}
Run Code Online (Sandbox Code Playgroud)

但是我得到了以下lint警告:

Warning 681: Loop is not entered
Run Code Online (Sandbox Code Playgroud)

问题是什么以及如何解决?

pat*_*cek 13

编写代码时,不会输入循环.NUM_DAYS % NUM_PERSON将评估true,所以num将是平等的NUM_DAYS / NUM_PERSON.由于我们处理的是int,65 / 33等于1.1 -1是的0,所以while条件会失败.

如果您的代码是按预期编写的(例如,那些常量是您希望始终使用的值),只需删除while循环即可.它永远不会被使用.但是,如果NUM_DAYSNUM_PERSON以后可能包含其他值,则可能无需担心.如果这些特定值不重要,请尝试将它们设置为值,以便除法将评估为大于的值1.

  • 如果这些常数无关紧要,则应将其移除,不要改变以产生关闭棉绒的结果. (2认同)

nou*_*ney 6

#define NUM_DAYS 65
#define NUM_PERSON 33

int num = 0;

if(NUM_DAYS % NUM_PERSON) // we go here, since (NUM_DAYS % NUM_PERSON) > 0
{
    num = NUM_DAYS / NUM_PERSON; // so num = 1 now
}
else 
{
    uum = NUM_DAY / NUM_PERSON + 1;
}

num = num - 1; // num = 0 now

while(num > 0) // num = 0 ! So we don't go in this loop
{
    //do something here
}
Run Code Online (Sandbox Code Playgroud)

这就是你得到这个警告的原因.编译器已确定您的循环无用(使用当前#define值).