访问被本地变量隐藏的全局变量

4

1
C还是C++?答案不同...此外,如果您写错标题,可以编辑它... - Matteo Italia
由于正文只提到了C语言,我已经移除了C++标签,特别是因为答案会有所不同:“no”和“::”(凭记忆说的,所以可能有误)。 - paxdiablo
4个回答

6

在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;
}

在C ++中,全局变量始终可用作::i

哇,这是一个有趣的技巧,加一! - Matteo Italia
@Potatoswatter,抱歉打扰了。 - Jens Gustedt

4

在 C 中没有办法。实际上,通过引入一个额外的作用域和使用extern声明,可以做到这一点,请参见@Potatoswatter的答案。

在 C++ 中,您可以使用::在全局命名空间中查找标识符(例如::m=15),顺便说一下,这也是访问“常规”命名空间成员(std::cout, ...)所使用的相同运算符。

此外,应该是 int main()


2
在C语言中不要这样做,给它们一个不同的名称,这样会令人困惑,而且这也是一种不好的编程习惯。

0

无论如何,相同的名称都是不好的实践,因为在重新定义m之前,您访问的仍然是全局变量。

int m = 20;
int main(void)
{
    printf("%d\n", m); // 20 would be printed here
    // Max you can do
    int m = 30;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接