Redeclaration of global variable vs local variable

后端 未结 3 1280
太阳男子
太阳男子 2020-11-30 07:17

When I compile the code below

#include

int main()
{
  int a;
  int a = 10;
  printf(\"a is %d \\n\",a);
  return 0;
}

I get

3条回答
  •  Happy的楠姐
    2020-11-30 07:38

    You can't have two global variables with the same name in C program. C might allow multiple definitions in the same file scope through the tentative definition rule, but in any case all definitions will refer to the same variable.

    Local Variable

    In C, multiple local variables are not "merged" into one.

    All the local variables with the same name will be referring to the different int-sized piece of memory.

     #include
    
     int main()
     {
      int a;
      int a = 10;
      printf("a is %d \n",a);  
      return 0;
     }
    

    So when assigning the memory to the redeclaration of the same variable it gives an Error.

    Global Variable

    In C, multiple global variables are "merged" into one. So you have indeed just one global variable, declared multiple times. This goes back to a time when extern wasn't needed (or possibly didn't exist - not quite sure) in C.

    In other words, all global variables with the same name will be converted to be one variable - so your

    #include
    
    int a;
    int a = 10;
    int main()
    {
    printf("a is %d \n",a);
    return 0;
    }
    

    will be referring to the same int-sized piece of memory.

提交回复
热议问题