主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

MISRA C++:2008 Rule 3-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. 1

理由

违反“唯一定义规则”会导致行为未定义。

Polyspace 实现

检查项会标记相同函数或对象有多个定义且定义在某些令牌上不同的情况。检查项不会对未使用代码(如

  • 未实例化的模板

  • 未调用的 staticextern 函数

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

  • 未使用的类型和变量

报告中的补充消息

The One Definition Rule shall not be violated.

类声明 className 违反了唯一定义规则:

它与其他声明(fileNamelineNumber)冲突。

故障排除

如果您预期会出现违规,而 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。但是,定义中结构体字段的顺序发生了变化。

检查信息

组:基本概念
类别:必需

版本历史记录

在 R2013b 中推出


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.