Get warning when a variable is shadowed

19,056

Both gcc and clang support the -Wshadow flag which will warn about variables that shadow one another. For example the warning I receive from gcc for your code is the following:

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 documents the flag here and says:

Warn whenever a local variable or type declaration shadows another variable, parameter, type, class member (in C++), or instance variable (in Objective-C) or whenever a built-in function is shadowed. Note that in C++, the compiler warns if a local variable shadows an explicit typedef, but not if it shadows a struct/class/enum.

In Visual Studio this looks like it was not possible before but seems to be fixed in recent versions.

Share:
19,056

Related videos on Youtube

Ystar
Author by

Ystar

Updated on September 14, 2022

Comments

  • Ystar
    Ystar over 1 year

    I generally want to avoid code like this:

    #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);
    }
    

    How can I find such usage of variables? That means, that in the same function a "more local" variable has the same name as a more global variable?

    C-Standard : C 99