MISRA C Rule8.5 3447 3451 Rule8.6 0630
、 变量被声明为具有外部链接属性,但声明不是在头文件中 ; 全局标识符在多个文件中被声明 ; 多次定义了对象(外部链接)。
工具/原料
Rule8.5 3447 3451 Rule8.6 0630
MISRA C:2012
Rule8.5 3447
1、 罕铞泱殳 3447 '%s' is being declared with external linkage but this declaration is not in a header file. 对象或函数被声明为具有外部链接属性,然而这个声明并不是在头文件中进行的。一个具有外部链接属性的对象,暗示它会被多个翻译单元访问。
2、为了确保定义和用法的一致性,通常首先在头文件中声明对象,然后在要定义或使用这个对象的每一个翻译单元中都包含这个头文件。
3、编程规范修改举例
Rule8.5 3451
1、 罕铞泱殳 3451 The global identifier '%s泌驾台佐39; has been declared in more than one file. 这个翻译单元中的对象/函数在多个文件中被声明。我们有必要保持这些声明的保持一致,这也就增加了维护开销。一个具有外部链接属性的对象应该被声明在一个单独的头文件中,然后在要定义和引用它的翻译单元中,将它包含进来。
2、在下面的例子中,函数 'printf()' 既在main源文件中声明,又在标准头文件 "stdio.h" 中声明,因此将会生成消息 3451。
3、编程规范修改举例
Rule8.6 0630
1、 罕铞泱殳 0630 [U] More than one definition of '%s' (with external linkage). 全局对象或函数被多次定义。允许声明多次,但是只能定义一次。即使是相同的定义,也不能多次定义。
2、官方示例
3、编程规范修改举例