c - 米斯拉-C : cast literal number

标签 c misra

我看了一段源码, 有这样的说法: uint32 XYZ; ... XYZ = (uint32)0x0000000U。

我想知道是否需要强制转换,XYZ = 0U 可以吗?

谢谢

最佳答案

整数常量0U理论上可以是一个64位的unsigned int。如果是这样,则需要强制转换,因为 MISRA-C (2012 10.3) 不允许隐式转换为更窄的类型。但是,在 32 位和更小的 CPU 上不需要转换。

另一种方法是编写 uint32_t XYZ = UINT32_C(0);,在这种情况下,编译器会自动为整数常量选择合适的类型。

关于c - 米斯拉-C : cast literal number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43056328/

相关文章:

c - 更好地理解链表

c - 为什么在不同作用域中用相同名称声明的变量被分配了相同的内存地址?

c++ - 安全编码实践

c - 关于 C 语言 union 的想法,关于 MISRA

c - 避免私有(private)函数的原型(prototype)声明(在使用前定义)是否违反 MISRA?

c - 什么(最小)C 图形库提供这些功能

c - 程序集 x86 - 调用 C 函数

c - 如何防止标准输入流在程序启动时从关联的文件描述符中读取数据?

c++ - libstdc++ 是否符合 MISRA C++?

c - 终止带有 else 子句的 if … else if 有什么好处?