我对以下代码有疑问:
#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
,如何解决?还是有其他方法可以绕过它,除了将常量变为变量?
答案 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;