如何打印具有相同名称的全局变量和局部变量的值?

时间:2012-08-29 18:04:22

标签: c gcc

这是我的代码,我想打印15和12,但由于实例成员隐藏了a的本地值,因此打印了两次。

#include <stdio.h>                                  
int a = 12;             
int main()          
{           
    int a = 15;             
    printf("Inside a's main local a = : %d\n",a);                  
    printf("In a global a = %d\n",a);            
    return 0;           
}

为什么以及有没有办法在c中打印它? ...顺便说一句,我在c ++中知道。

4 个答案:

答案 0 :(得分:20)

在新的复合语句中使用extern说明符。

这样:

#include <stdio.h>      

int a = 12;             

int main(void)          
{           
    int a = 15;             
    printf("Inside a's main local a = : %d\n", a);

    {
        extern int a;
        printf("In a global a = %d\n", a);
    }

    return 0; 
}

答案 1 :(得分:2)

我知道这不会直接回答你的问题,但最好的方法是更改​​局部变量的名称,使其不与全局变量的名称冲突

如果您可以控制函数内部的代码(即,您可以添加extern声明以使全局变量可见),那么您可以轻松更改变量的名称。

不可能说出哪个名字会更好。实际上,变量无疑具有比a更具描述性的名称。它们的使用方式应该为您提供一些关于它们的好名称的指导。

如果他们实际上服务于同一目的,他们可能并不都需要存在。您可以删除main()本地的变量,或者更好的是删除全局变量并将本地(或其地址)传递给需要访问它的其他函数。

答案 2 :(得分:1)

我想我在某种程度上找到了答案......它有效

#include <stdio.h>

int a = 5;


int main()
{
    int a=10;
    if(1)
    {
        extern int a;
        printf("global: %d\n", a);
    }
    printf("local: %d\n", a);
    return 0;
}

答案 3 :(得分:-2)

add :: for global ambit

#include <stdio.h>                                  
int a=12;             
int main()          
{           
  int a=15;             
  printf("Inside a's main local a = : %d\n",a);                  
  printf("In a global a = %d\n",::a);            
  return 0;           
}