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]
有效吗?