1

当我定义MACRO但未在代码中的任何地方使用时,我观察到了上述警告。但在某些情况下,我也收到MACRO了代码中正在使用的警告。

我已经定义了宏 - INVALIDATION_ADDR 并在某些地方使用。但是,我观察到了相同的 MISRA 警告。我不确定收到此警告的原因。如何避免此警告。

情况1:

未引用“void”类型的全局宏“INVALIDATION_ADDR”[MISRA 2012 规则 2.5,咨询]

皮棉规则 755

未引用全局宏“符号”(位置)——“全局”宏是在头文件中定义的宏。此消息是针对在非库头文件中定义的宏给出的。该宏不用于构成该程序的任何模块中。此消息在单元检出时被抑制(-u 选项)。

typedef uint32 AddressType;

#define INVALIDATION_ADDRESS   (AddressType)0x12345678U

void fun1()
{
     AddressType Address;
     Address = INVALIDATION_ADDRESS;
}

案例二:

未引用“ConditionsEnumType”类型的全局 typedef“ConditionsEnumType”(第 110 行,文件 ITypes.h)[MISRA 2012 规则 2.3,咨询]

皮棉规则 756

未引用全局 typedef 'Symbol' (Location) -- 此消息是针对在非库头文件中声明的 typedef 符号给出的。该符号不用于构成程序的任何模块中。此消息在单元检出时被抑制(-u 选项)。

typedef unsigned char       uint8; 
typedef uint8 StateType;

typedef enum
    {
        BLOCK      =  0x80U,
        HEADER     =  0x81U,
        DATA       =  0x82U,    
        OUTCOME    =  0x84U
    } ConditionsEnumType;

/* used in below func */ 
    void fun2()
    {
         StateType state;
         state = (StateType) BLOCK; 
    }
4

1 回答 1

4

情况1:

此诊断:

global macro 'INVALIDATION_ADDR' of type 'void' not referenced [MISRA 2012 Rule 2.5, advisory]

与此宏不匹配:

#define INVALIDATION_ADDRESS   (AddressType)0x12345678U

所以我认为 MISRA 检查器是正确的,因为您有另一个未引用的宏定义。

案例二:

ConditionsEnumType如果您不使用此类型定义任何变量,则实际上不会引用typedef 。

您可能希望将源更改为:

void fun2()
{
     ConditionsEnumType state;
     state = BLOCK; 
}
于 2019-09-13T06:28:52.170 回答