【问题标题】:Get warning when a variable is shadowed当变量被遮蔽时得到警告
【发布时间】:2014-09-28 20:46:20
【问题描述】:

我通常想避免这样的代码:

#include <stdio.h>

int main(int argc, char *argv[]){

  int n = 3;

  for (int n = 1; n <= 10; n++){
    printf("%d\n", n);
  }

  printf("%d\n", n);
}

我怎样才能找到变量的这种用法?这意味着,在同一个函数中,“更局部”的变量与更全局的变量具有相同的名称?

C 标准:C 99

【问题讨论】:

    标签: c variables warnings c99


    【解决方案1】:

    gcc 和 clang 都支持-Wshadow 标志,它会警告变量相互影响。例如,我从gcc 收到的针对您的代码的警告如下:

    warning: declaration of ‘n’ shadows a previous local [-Wshadow]
    for (int n = 1; n <= 10; n++){
             ^
    warning: shadowed declaration is here [-Wshadow]
    int n = 3;
        ^
    

    gcc 记录标志 here 并说:

    当一个局部变量或类型声明遮蔽另一个时发出警告 变量、参数、类型、类成员(在 C++ 中)或实例变量 (在 Objective-C 中)或者当一个内置函数被隐藏时。笔记 在 C++ 中,如果局部变量遮蔽了 显式 typedef,但如果它隐藏结构/类/枚举则不是。

    在 Visual Studio 中,这在以前似乎是不可能的,但 seems to be fixed in recent versions

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-12
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      • 2016-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多