主要内容

AUTOSAR C++14 Rule M3-2-2

The One Definition Rule shall not be violated

描述

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

规则定义

The One Definition Rule shall not be violated.

理由

违反“一个定义规则”(One Definition Rule)会导致未定义行为。

Polyspace 实现

检查项会标记以下情况:同一个函数或对象有多个定义且这些定义中的某些标记不同。检查项不会对未使用的代码进行标记,例如:

  • 未实例化的模板

  • 未调用的 staticextern 函数

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

  • 未使用的类型和变量

故障排除

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

示例

全部展开

此示例使用两个文件:

  • file1.cpp:

    
    typedef struct S //Noncompliant
    {
       int x;
       int y;
    }S; 
    void foo(S& s){
    //...
    } 
  • file2.cpp:

    
    typedef struct S 
    {
       int y;
       int x;
    }S ; 
    void bar(S& s){
    //...
    }

在此示例中,file1.cppfile2.cpp 都定义了结构体 S。不过,这两个定义交换了结构体字段的顺序。

检查信息

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

版本历史记录

在 R2019a 中推出