应该使用表示大小和符号的类型来代替基本的数字类型。
拜托你能帮帮我吗?为什么我的工具检测到对此代码的违反:
typedef int int_t;我怎么才能解决这个问题?
发布于 2020-05-09 17:05:52
int的位宽取决于硬件体系结构(有时还取决于其他参数,如工具链的选择和配置)。该类型仅具有最小的位宽/值范围,但不需要具有某些确切的属性。
相反,类型int8_t、int16_t、int32_t、int64_t及其对应的无符号对应(相同的类型名但带有u前缀)在stdint.h中定义,以提供确切的位宽/值范围--但将它们移植到不同的平台时,它们的使用效率仍然存在疑问。
在嵌入式系统中(特别是那些需要安全性、安全性和/或可用性的系统),主要关注的是对于给定的变量类型,每个平台都支持程序员期望的位宽(或者相反,每个程序员都承认所使用类型的限制)。因此,一个好的建议是从固定宽度类型开始,并且只有在优化是非常必要的和使用非固定宽度类型所引发的风险可以通过其他措施(在当时合法的米斯拉规则偏差)的情况下才使用其他类型。
发布于 2020-05-11 07:59:31
MISRA:2012支持C90和更高版本的标准。在现代C中,我们应该简单地使用stdint.h而不是typedef,所以我强烈建议这样做。精心设计自己的定制类型是一种糟糕的做法。
如果您使用的是C90,那么您需要制作与stdint.h中相同的类型。就像这样:
#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L)
typedef unsigned char uint8_t;
/* and so on... */
#else
#include <stdint.h>
#endifC90没有定义__STDC_VERSION__,C94把它定义为199409L,所以上面的宏涵盖了C99之前的所有内容。
上述需要放在一些项目范围内的通用标头中.
对bool、false和true也做同样的事情,因为在C90中也没有stdbool.h。
https://stackoverflow.com/questions/61700035
复制相似问题