我有以下内容:
static unsigned int *tick = NULL;
...
if (tick == NULL)
tick = calloc(MAX_PORT,sizeof(unsigned int));
...
功能上按预期工作,但覆盖率抱怨: 解析警告(PW.INCOMPATIBLE_ASSIGNMENT_OPERANDS) 1. incompatible_assignment_operands:类型" int"的值无法分配给" unsigned int *" 类型的实体 而且我完全不明白为什么
答案 0 :(得分:7)
错误消息表明Coverity认为calloc
返回int
,
如果您没有包含stdlib.h
(旧版C中为calloc)
,则会发生这种情况。
但现代C中不允许这样做(即C99及以上版本不允许隐式声明)。
答案 1 :(得分:1)
" ...功能正常,#34;
不,此代码无法在任何版本的C,新旧版本上编译。
在名为C90的旧版C中,您可能忘记包含stdlib.h
,然后编译器会将calloc
视为返回int
而不是void*
的函数。这就是静态分析仪的用武之地。但是代码甚至不应该编译,因为它甚至会在C90编译器上产生诊断 - 你不能将int
分配给unsigned int*
。它从未有效C.
在标准C中,代码甚至不会那么远,因为编译器会告诉你它不知道标识符calloc
是什么。
所有这些都表明您的编译器是1)旧的和2)不兼容的。