gpt4 book ai didi

c - size_t foo = 0;需要类型转换吗?

转载 作者:太空狗 更新时间:2023-10-29 17:25:01 25 4
gpt4 key购买 nike

Looking at this answer并知道 0 is an octal constant :

For hexadecimal [constants [and octal according to the comments]], it is the first type the value can fit in: int, unsigned int, long, unsigned long, long long, unsigned 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; 可能更正确

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

--

编辑添加:

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

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

关于c - size_t foo = 0;需要类型转换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31847640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com