[英]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.