繁体   English   中英

size_t foo = 0;需要演员?

[英]Does size_t foo = 0; need a cast?

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

对于十六进制[常量[和根据注释的八进制]] ,它是该值可以适合的第一种类型: intunsigned intlongunsigned longlong longunsigned long long

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

size_t foo = 0;

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

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

(注意:我已经改为size_t foo = 0U;因为这比QA争论要简单得多,但我想满足自己的好奇心。)

我不确定你想要达到的目的,但......

  • 0的类型为signed int
  • 0U的类型为unsigned int

size_t需要类型size_t - 并且大小(通常)是无符号的

所以严格遵守size_t foo = 0U; 虽然使用size_t foo = (size_t)0;可能更正确size_t foo = (size_t)0;

另外,讨论0是十进制,八进制还是其他任何东西都是无关紧要的......它仍然是零。

-

编辑添加:

虽然在MISRA C:2004中弃用了有符号和无符号之间的显式转换(虽然这被广泛偏离),但对于MISRA C:2012规则10.3明确允许基本上带符号类型的非负整数常量表达式可以被赋予基本上对象的无符号类型,如果其值可以由该类型表示

这是一种标准的方式,说你不需要U.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM