2

我对以下代码有疑问:

#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,如何解决?或者除了将常量更改为变量之外,还有其他方法可以绕过它吗?

4

2 回答 2

6

这是 PC-Lint 的无害警告。

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

sizeof(day) > sizeof(people)

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

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

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

请务必在>表达式之后包含注释,否则警告不会消失。

于 2013-06-17T18:14:52.933 回答
4

您的检查器会通知您sizeof(day)并且sizeof(people)在编译时已知,因此条件将始终采用一个分支,而不是另一个。

作为在工具上禁止警告的替代方法,您可以修改代码以使用条件预处理器指令来明确采用的分支。

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

size = SIZE;
于 2013-06-17T18:19:14.853 回答