可以在块范围内定义变量 'EL_adv' [MISRA 2012 Rule 8.9, advisory] | pclint 9003 和 pclint 9075
Could define variable 'EL_adv' at block scope [MISRA 2012 Rule 8.9, advisory] | pclint 9003 and pclint 9075
我在 .c
文件中声明了静态全局变量,如下所示。我正在为少数静态变量而不是所有静态变量观察这个问题。对于某些静态变量,它不会引发任何警告。
static uint8 EL_adv = 0;
我低于 MISRA 警告:
"Could define variable 'EL_adv' at block scope [MISRA 2012 Rule 8.9,
advisory] | pclint 9003"
如果我删除静态,则会出现如下错误。
uint8 EL_adv = 0;
"external symbol 'EL_adv' defined without a prior declaration [MISRA
2012 Rule 8.4, required] | pclint 9075"
我在如下代码中使用,我将获取 fun1 中变量的值,并将使用 fun2 和 fun3 中的值。
void EL_ReadAll(void)
{
EL_adv = getValue();
}
void get_my1_EL_Adv()
{
my1EL_Adv = EL_adv;
}
void get_my2_EL_Adv()
{
my2EL_Adv = EL_adv;
}
通常,您会收到此类错误,因为 MISRA-C 更喜欢仅由一个函数使用的文件范围变量应在该函数内声明。但这在嵌入式系统中并不总是可行,而且该规则仅供参考。要么将变量声明移动到使用它的单个函数中,要么忽略建议规则。
简单地删除 static
对您没有好处,因为这会将变量变成“全局”,这是更严重的 MISRA 违规行为。
我在 .c
文件中声明了静态全局变量,如下所示。我正在为少数静态变量而不是所有静态变量观察这个问题。对于某些静态变量,它不会引发任何警告。
static uint8 EL_adv = 0;
我低于 MISRA 警告:
"Could define variable 'EL_adv' at block scope [MISRA 2012 Rule 8.9, advisory] | pclint 9003"
如果我删除静态,则会出现如下错误。
uint8 EL_adv = 0;
"external symbol 'EL_adv' defined without a prior declaration [MISRA 2012 Rule 8.4, required] | pclint 9075"
我在如下代码中使用,我将获取 fun1 中变量的值,并将使用 fun2 和 fun3 中的值。
void EL_ReadAll(void)
{
EL_adv = getValue();
}
void get_my1_EL_Adv()
{
my1EL_Adv = EL_adv;
}
void get_my2_EL_Adv()
{
my2EL_Adv = EL_adv;
}
通常,您会收到此类错误,因为 MISRA-C 更喜欢仅由一个函数使用的文件范围变量应在该函数内声明。但这在嵌入式系统中并不总是可行,而且该规则仅供参考。要么将变量声明移动到使用它的单个函数中,要么忽略建议规则。
简单地删除 static
对您没有好处,因为这会将变量变成“全局”,这是更严重的 MISRA 违规行为。