MISRA C 2012 违反规则 9.1,即使使用初始化变量
MISRA C 2012 violation of rule 9.1 even with an initialized variable
我正在尝试从我的代码中删除违规规则 9.1。
规则 9.1:具有自动存储持续时间的对象的值在设置之前不得读取
示例代码:
#include <stdint.h>
#include <stdbool.h>
#define VAL 0xABCDEFABU
int32_t main(void);
static int32_t do_test(bool k);
static void func(uint64_t *var3, const uint64_t *var5);
int32_t
main (void)
{
bool b = false;
int32_t y = do_test(b);
return y;
}
static int32_t
do_test(bool k)
{
uint64_t i = 0, var4[10];
int32_t result = 0;
for(i = 0U; i < 10U; i++) {
var4[i] = VAL + i;
}
if(k == false) {
uint64_t var2[10];
func(var2, var4);
if(var2[9] == var4[9]) {
result = 1;
}
}
return result;
}
static void
func(uint64_t *var3, const uint64_t *var5)
{
int32_t i;
for(i = 0; i < 10; i++) {
var3[i] = var5[i];
}
}
我正在函数 do_test 中初始化 var2,方法是调用另一个函数 "func",其中 var4 被复制到 var2。
编译正常,我得到 y 值 = 1。
是否由于 func 中的参数作为指针而导致违规,并且函数 do_test 没有意识到通过 func 中的指针赋值
有什么方法可以解决这个问题吗?
这是许多静态分析器中的常见工具错误。您的静态分析器显然无法理解函数 func
初始化了 var2
的所有项目,因此您在行 var2[9] == var4[9]
.
上得到误报
在许多静态分析器上,int my_array[10]; initialize(my_array);
等代码会给出令人沮丧的误报。 "You try to initialize the array before it has been initialized!!!"哦真的...谢谢你,最有帮助的静态分析器。
你的代码没问题。向您的工具供应商提交错误报告。
我正在尝试从我的代码中删除违规规则 9.1。
规则 9.1:具有自动存储持续时间的对象的值在设置之前不得读取
示例代码:
#include <stdint.h>
#include <stdbool.h>
#define VAL 0xABCDEFABU
int32_t main(void);
static int32_t do_test(bool k);
static void func(uint64_t *var3, const uint64_t *var5);
int32_t
main (void)
{
bool b = false;
int32_t y = do_test(b);
return y;
}
static int32_t
do_test(bool k)
{
uint64_t i = 0, var4[10];
int32_t result = 0;
for(i = 0U; i < 10U; i++) {
var4[i] = VAL + i;
}
if(k == false) {
uint64_t var2[10];
func(var2, var4);
if(var2[9] == var4[9]) {
result = 1;
}
}
return result;
}
static void
func(uint64_t *var3, const uint64_t *var5)
{
int32_t i;
for(i = 0; i < 10; i++) {
var3[i] = var5[i];
}
}
我正在函数 do_test 中初始化 var2,方法是调用另一个函数 "func",其中 var4 被复制到 var2。
编译正常,我得到 y 值 = 1。
是否由于 func 中的参数作为指针而导致违规,并且函数 do_test 没有意识到通过 func 中的指针赋值
有什么方法可以解决这个问题吗?
这是许多静态分析器中的常见工具错误。您的静态分析器显然无法理解函数 func
初始化了 var2
的所有项目,因此您在行 var2[9] == var4[9]
.
在许多静态分析器上,int my_array[10]; initialize(my_array);
等代码会给出令人沮丧的误报。 "You try to initialize the array before it has been initialized!!!"哦真的...谢谢你,最有帮助的静态分析器。
你的代码没问题。向您的工具供应商提交错误报告。