size_t foo = 0; 需要演员?

Ken*_*Y-N 6 c type-conversion misra

看看这个答案并知道0是一个八进制常量:

十六进制[常量[和根据意见]八进制],它是第一类型的值可以适应:int,unsigned int,long,unsigned long,long long,unsigned long long

因此,我推断这不需要演员:

size_t foo = 0;
Run Code Online (Sandbox Code Playgroud)

但是,由于严格的MISRA-C lint工具,我收到有关非法隐式类型转换的消息 - MISRA-C:2004规则10.1.

我的理解是错误的,还是错误的工具?

(注意:我已经改变了,size_t foo = 0U;因为这比与质量保证争论要简单得多,但我想满足自己的好奇心.)

And*_*rew 3

我不确定你想要实现什么目标,但是......

  • 0 是有符号 int 类型
  • 0U 是 unsigned int 类型

size_t需要类型size_t- 和大小(通常)无符号

因此,为了严格遵守,size_t foo = 0U;尽管使用可能更正确size_t foo = (size_t)0;

顺便说一句,关于 0 是十进制、八进制还是其他任何东西的讨论是无关紧要的……它仍然是零。

--

编辑添加:

尽管 MISRA C:2004 中不推荐使用有符号和无符号之间的显式转换(尽管这存在很大偏差),但对于 MISRA C:2012,规则 10.3 明确允许本质上有符号类型的非负整数常量表达式可以分配给本质上有符号类型的对象。无符号类型(如果其值可以用该类型表示)

这是一种标准的表达方式,表示您不需要 U