初始化枚举类型期间的 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;
并且我低于警告
An expression value of essential type 'Essentially
Enum' is assigned to an object of essential type
'Essentially Enum' comment : MISRA 10.3 (C90-2012 req.)
有人知道我该如何解决这个警告吗?
因为枚举常量 GPIO_PIN_9
属于 T_GPIO_PIN ioPin
它们都具有相同的 "essentially enum" 类型。 MISRA-C:2012 附录 D.5 和 D.6 对此进行了解释。在 MISRA 术语中,您的枚举是 类型为 enum<i>
的命名枚举 (*),其枚举常量属于同一类型。
如果您尝试为枚举分配一些值,这些值是另一种枚举类型的枚举常量,您只会遇到问题。我想该工具可能会混淆,因为您都使用了枚举标记和 typedef,也许它认为 enum e_gpio_pin
和 T_GPIO_PIN ioPin
是不同的枚举类型。
就 MISRA 而言,您的代码没有任何问题。通过向您的工具供应商发布错误报告来解决警告。工具错误的解决方法可能是删除枚举标记。
(*) 见附录 D.5
A named enum type is an enumeration which has a tag or which is used
in the definition of any object, function or 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;
并且我低于警告
An expression value of essential type 'Essentially Enum' is assigned to an object of essential type 'Essentially Enum' comment : MISRA 10.3 (C90-2012 req.)
有人知道我该如何解决这个警告吗?
因为枚举常量 GPIO_PIN_9
属于 T_GPIO_PIN ioPin
它们都具有相同的 "essentially enum" 类型。 MISRA-C:2012 附录 D.5 和 D.6 对此进行了解释。在 MISRA 术语中,您的枚举是 类型为 enum<i>
的命名枚举 (*),其枚举常量属于同一类型。
如果您尝试为枚举分配一些值,这些值是另一种枚举类型的枚举常量,您只会遇到问题。我想该工具可能会混淆,因为您都使用了枚举标记和 typedef,也许它认为 enum e_gpio_pin
和 T_GPIO_PIN ioPin
是不同的枚举类型。
就 MISRA 而言,您的代码没有任何问题。通过向您的工具供应商发布错误报告来解决警告。工具错误的解决方法可能是删除枚举标记。
(*) 见附录 D.5
A named enum type is an enumeration which has a tag or which is used in the definition of any object, function or type;