【发布时间】:2017-12-14 10:31:31
【问题描述】:
我正在尝试从我的代码中删除违反规则 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];
}
}
我通过调用另一个函数“func”在函数 do_test 中初始化 var2,其中 var4 被复制到 var2。
编译正常,我得到 y value = 1。
是否是由于func中的参数作为指针而导致的违规,并且函数do_test没有通过func中的指针了解值分配
有没有办法解决这个问题?
【问题讨论】:
-
var3或var5是否已初始化?var5[i]是否已初始化?显然不是,所以这并不违反规则。 -
出于好奇,哪个工具发出了警告?我想我还没有找到没有这个错误的。
-
函数:
main()在C语言中是特殊的,不要原型。使用int的返回类型, -
阅读rule sets 了解“规则集”以及如何操作它们。
-
详细信息:“我正在初始化 var2 ... function "func" "。 C 将其描述为分配
var2的元素。要初始化var2,使用uint64_t var4[10] = { something };之后的任何内容都是assignment。