簡體   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