2

遵循我的代码中定义的枚举

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.)

有谁知道我该如何解决这个警告?

4

1 回答 1

3

由于枚举常量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 而言,您的代码没有任何问题。通过向您的工具供应商发布错误报告来解决警告。工具错误的解决方法可能是删除 enum 标记。


(*) 见附录 D.5

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

于 2015-09-11T06:26:35.573 回答