在C语言中,你可以这样做。当然,这只是琐事,实际上生活中不应该这样做。
在任何地方都可以声明 something extern
,并且始终将声明的变量链接到具有该名称的全局变量。
#include <stdio.h>
int i = 3;
int main( int argc, char **argv ) {
int i = 6;
printf( "%d\n", i );
{ // need to introduce a new scope
extern int i; // shadowing is allowed here.
printf( "%d\n", i );
}
return 0;
}
::i
。在 C 中没有办法。实际上,通过引入一个额外的作用域和使用extern
声明,可以做到这一点,请参见@Potatoswatter的答案。
在 C++ 中,您可以使用::
在全局命名空间中查找标识符(例如::m=15
),顺便说一下,这也是访问“常规”命名空间成员(std::cout
, ...)所使用的相同运算符。
此外,应该是 int main()
。
无论如何,相同的名称都是不好的实践,因为在重新定义m
之前,您访问的仍然是全局变量。
int m = 20;
int main(void)
{
printf("%d\n", m); // 20 would be printed here
// Max you can do
int m = 30;
}