MISRA-C规则11.2:从数组到指针的转换
我有两个结构:MISRA-C规则11.2:从数组到指针的转换,c,casting,misra,C,Casting,Misra,我有两个结构: typedef struct { uint8 valid; uint8 identifier[20]; uint8 parentIdentifier[20]; /* etc */ } CustomData; #define max_data_size 10 typedef struct { CustomData data[max_data_size]; uint32 numberOfUsedData; /* etc. */
typedef struct {
uint8 valid;
uint8 identifier[20];
uint8 parentIdentifier[20];
/* etc */
} CustomData;
#define max_data_size 10
typedef struct {
CustomData data[max_data_size];
uint32 numberOfUsedData;
/* etc. */
} MyContext;
和一个带有签名的函数
uint8 parentInList(CustomData *data,
const CustomData* const list,
uint32 length);
我尝试按如下方式调用我的函数:
MyContext ctx = /* some proper initialization */;
result = parentInList(&ctx.data[0], ctx.data, ctx.numberOfUsedData);
我对的静态分析表明,ctx.data
是违反MisraC规则11.2的演员阵容:“不应在指向 “不完整类型和任何其他类型” 然而,我看不出这是怎么回事。如果数组的大小是固定的,那么它不是不完整的类型,对吗?
这是我的静态分析器因为宏而给出的误报吗?或者我犯了错误,我该如何修复它?
MyContext
不是指针类型,所以我不明白如何将->
与ctx
一起使用,后者不是指针,并将其编译。MyContext ctx
未初始化,因此这是一个错误problem@EugeneSh. 你说得对。这是一个简化的示例,但我的实际代码按照预期编译和运行,这只是一个MISRA错误。编辑了这个问题。@bigwillydos它们是在我的实际代码中初始化的,这是一个简化的示例。我想这条评论应该是解释性的。&ctx.data[0]
有效吗?MyContext
不是指针类型,所以我不明白如何将->
与ctx
一起使用,而ctx
不是指针并将其编译。MyContext-ctx
没有初始化,因此这是一个问题problem@EugeneSh. 你说得对。这是一个简化的示例,但我的实际代码按照预期编译和运行,这只是一个MISRA错误。编辑了这个问题。@bigwillydos它们是在我的实际代码中初始化的,这是一个简化的示例。我想这个评论应该是解释性的。&ctx.data[0]
有效吗?