访问被局部[重复]隐藏的全局变量

问题描述 投票:0回答:4

可能重复:
如何访问 C 中的阴影全局变量?

如果存在同名的局部变量,如何在 C 中访问全局变量?

int m = 20;
int main(void)
{
    int m = 30;
}
c global-variables local-variables shadowing
4个回答
6
投票

在 C 中,你可以。当然这只是琐事,在现实生活中你不应该这样做。

声明某事

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
.


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;
}
© www.soinside.com 2019 - 2024. All rights reserved.