如何在C中清除以下PC-Lint警告?

时间:2013-06-17 18:00:24

标签: c constants pc-lint

我对以下代码有疑问:

#define NUM_DAYS 60
#define NUM_PEOPLE 30

int days[NUM_DAYS];
int people[NUM_PEOPLE];

int size;

size = sizeof(day) > sizeof(people) ? sizeof(day) : sizeof(people);

虽然可以将宏NUM_PEOPLE更改为大于NUM_DAYS或小于NUM_DAYS,但我收到警告: Warning 506: Constant value Boolean,如何解决?还是有其他方法可以绕过它,除了将常量变为变量?

2 个答案:

答案 0 :(得分:6)

这是PC-Lint无害的警告。

sizeof表达式是一个整数常量(除非它的操作数是一个可变长度数组,这不是你的情况),PC-Lint只是通知你:

sizeof(day) > sizeof(people)

是程序中的布尔常量(值1)。

您可以通过在关系表达式之后添加以下注释来消除警告:

 size = sizeof(day) > sizeof(people) /*lint -save -e506 */ ? sizeof(day)
        : sizeof(people);

请务必在>表达式后面加上评论,否则警告不会消失。

答案 1 :(得分:4)

您的检查员通知您在编译时已知sizeof(day)sizeof(people),因此条件总是占用一个分支,而不是另一个分支。

作为抑制工具警告的替代方法,您可以修改代码以使用条件预处理程序指令使得采用的分支显式化。

#if (NUM_DAYS > NUM_PEOPLE)
#define SIZE sizeof(day)
#else
#define SIZE sizeof(people)
#endif

size = SIZE;