主要内容

MISRA C++:2023 Rule 6.4.1

A variable declared in an inner scope shall not hide a variable declared in an outer scope

自 R2024b 起

描述

A variable declared in an inner scope shall not hide a variable declared in an outer scope. 1

理由

当两个同名变量分别存在于内部作用域和外部作用域时,对该变量名的任何引用都会使用内部作用域中的变量。但是,开发人员或评审可能会错误地认为使用了外部作用域中的变量。

Polyspace 实现

当一个变量隐藏了外部作用域中同名的另一个变量时,规则检查项会报告违规。例如,如果局部变量与全局变量同名,则局部变量在其生命周期内会隐藏全局变量。

针对一个变量的声明报告了违规,并且违规结果详细信息中的事件列表显示了另一个变量的声明。

故障排除

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

示例

全部展开

#include <stdio.h>

int fact[5]={1,2,6,24,120};

int factorial (int n)  {
    int fact=1;     // Noncompliant
    for(int i=1;i<=n;i++)
         fact*=i;
    return(fact);
 }


int factorial_fixed (int n)  {
    int f=1;       // Compliant
    for(int i=1;i<=n;i++)
        f*=i;
    return(f);
 }

factorial() 函数中整数变量 fact 的声明不合规,因为它隐藏了全局整数数组 fact

factorial_fixed() 函数通过重命名局部变量解决了该问题。

检查信息

组:基本概念
类别:必需
PQL 名称:std.misra_cpp_2023.R6_4_1

版本历史记录

在 R2024b 中推出


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.