13

这是我的代码,我想打印 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

4 回答 4

25

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; 
}
于 2012-08-29T18:05:48.460 回答
3

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

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

不可能说什么名字会更好。在实践中,这些变量无疑具有比 更具描述性的名称a。它们的使用方式应该会给你一些关于它们的好名字的指导。

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

于 2012-08-31T00:05:30.403 回答
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;
}
于 2012-08-30T08:08:30.260 回答
-1

为全局范围添加 ::

#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;           
}
于 2016-07-19T01:00:28.407 回答