[英]MISRA-C warning during initialization enum type
按照我的代码中定义的枚举
typedef enum e_gpio_pin
{
GPIO_PIN_1 = 1, /*!< pin 1 */
GPIO_PIN_2, /*!< pin 2 */
GPIO_PIN_3, /*!< pin 3 */
GPIO_PIN_4, /*!< pin 4 */
GPIO_PIN_5, /*!< pin 5 */
GPIO_PIN_6, /*!< pin 6 */
GPIO_PIN_7, /*!< pin 7 */
GPIO_PIN_8, /*!< pin 8 */
GPIO_PIN_9, /*!< pin 9 */
GPIO_PIN_10, /*!< pin 10 */
GPIO_PIN_FIRST = GPIO_PIN_1, /*!< first pin */
GPIO_PIN_LAST = GPIO_PIN_10 /*!< last pin */
} T_GPIO_PIN;
现在下面的行已用于初始化变量。
static const T_GPIO_PIN ioPin = GPIO_PIN_9;
我得到了警告
必需类型'Essentially Enum'的表达式值分配给必需类型'Essentially Enum'的对象注释:MISRA 10.3(C90-2012 req。)
有谁知道我该如何解决此警告?
由于枚举常量GPIO_PIN_9
属于T_GPIO_PIN ioPin
因此它们都具有相同的“基本枚举”类型。 MISRA-C:2012附录D.5和D.6中对此进行了说明。 用MISRA术语来说,您的枚举是enum<i>
类型的命名枚举 (*),其枚举常量是同一类型。
如果您尝试为枚举分配一些值,这些值是另一个枚举类型的枚举常量,则只会出现问题。 我想该工具可能会感到困惑,因为您都使用了枚举标签和typedef,也许它认为enum e_gpio_pin
和T_GPIO_PIN ioPin
是不同的枚举类型。
就MISRA而言,您的代码没有错。 通过向您的工具供应商发布错误报告来解决警告。 解决该工具错误的方法是删除枚举标记。
(*)见附录D.5
命名枚举类型是具有标签或用于任何对象,函数或类型的定义的枚举;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.