主要内容

AUTOSAR C++14 Rule M3-2-4

An identifier with external linkage shall have exactly one definition

描述

默认 Polyspace® as You Code 分析中反激活了此检查项。请参阅Checkers Deactivated in Polyspace as You Code Analysis (Polyspace Access)

规则定义

An identifier with external linkage shall have exactly one definition.

理由

如果一个标识符有多个定义或没有定义,可能会导致未定义行为。

Polyspace 实现

检查项不会对未使用的代码进行标记,例如:

  • 未实例化的模板

  • 未调用的 static 函数或 extern 函数

  • 未调用和未定义的局部函数

  • 未使用的类型和变量

故障排除

如果您预期会出现违规,而 Polyspace 未报告该违规,请参阅诊断为何编码规范违规未按预期显示

示例

全部展开

此示例使用两个文件:

  • file1.cpp:

    
    typedef signed   int          int32_t;
    
    namespace NS {
    	extern int32_t a;  
    
    	void foo(){
    		a = 0;
    		
    	}
    }; 
  • file2.cpp:

    
    typedef signed   int          int32_t;
    typedef signed   long long         int64_t;
    
    namespace NS {
    	extern int64_t a; //Noncompliant
    	void bar(){
    		++a;
    		
    	}
    };

同一个标识符 a 在两个文件中都进行了定义。

检查信息

组:基本概念
类别:必需、自动

版本历史记录

在 R2019a 中推出