为什么在使用带有unsigned int

时间:2017-12-21 14:53:47

标签: c calloc coverity

我有以下内容:

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 *" 类型的实体 而且我完全不明白为什么

2 个答案:

答案 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)不兼容的。