这是我的代码,我想打印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 ++中知道。
答案 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;
}