缺少对象定义声明(规则 MisraC2012-8.4)
Missing declaration for object definition (Rule MisraC2012-8.4)
我试图了解如何处理此错误:
必需:缺少对象定义的声明 [hi](规则 MisraC2012-8.4)
我的代码是:
typedef struct {
int l;
} some_struct;
some_struct hi = {
5
};
int main(void) {
return(0);
}
static 解决了这个问题,但我需要使用这个变量作为另一个文件的外部变量。
规则 8.4 是关于对象与外部链接的类型不兼容。该规则旨在防止可能存在的严重错误:在一个文件中将对象声明为一种类型,然后在另一个文件中将其定义为另一种类型。
为了防止此类错误,MISRA 因此要求对象的先前 extern
声明对包含定义的文件可见。
因此,如果您打算在文件范围内定义 some_struct hi
,则还必须在某处添加一个声明,最好是在头文件中:
extern some_struct hi;
static
解决了这个问题,因为那时你不再有外部链接,规则也不适用。
请注意(非常量)extern
意大利面条式全局变量在任何形式的程序、MISRA 或非 MISRA 中都非常不鼓励。在绝大多数可能的情况下,程序中存在此类全局变量是由于程序设计不当造成的。
我试图了解如何处理此错误:
必需:缺少对象定义的声明 [hi](规则 MisraC2012-8.4)
我的代码是:
typedef struct {
int l;
} some_struct;
some_struct hi = {
5
};
int main(void) {
return(0);
}
static 解决了这个问题,但我需要使用这个变量作为另一个文件的外部变量。
规则 8.4 是关于对象与外部链接的类型不兼容。该规则旨在防止可能存在的严重错误:在一个文件中将对象声明为一种类型,然后在另一个文件中将其定义为另一种类型。
为了防止此类错误,MISRA 因此要求对象的先前 extern
声明对包含定义的文件可见。
因此,如果您打算在文件范围内定义 some_struct hi
,则还必须在某处添加一个声明,最好是在头文件中:
extern some_struct hi;
static
解决了这个问题,因为那时你不再有外部链接,规则也不适用。
请注意(非常量)extern
意大利面条式全局变量在任何形式的程序、MISRA 或非 MISRA 中都非常不鼓励。在绝大多数可能的情况下,程序中存在此类全局变量是由于程序设计不当造成的。