繁体   English   中英

初始化枚举类型期间的MISRA-C警告

[英]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_pinT_GPIO_PIN ioPin是不同的枚举类型。

就MISRA而言,您的代码没有错。 通过向您的工具供应商发布错误报告来解决警告。 解决该工具错误的方法是删除枚举标记。


(*)见附录D.5

命名枚举类型是具有标签或用于任何对象,函数或类型的定义的枚举;

暂无
暂无

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

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