关于局部变量和全局变量同名的问题

时间:2022-07-15 10:28:56
如果在一个文件中局部变量和全局变量同名

在函数中怎么引用全局变量

22 个解决方案

#1


::变量名
C++

#2


在C中呢?怎么处理

#3


事先用一个指针指向那个全局变量!

#4


还有没有其他的方法

#5


局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。

所以是没有办法的.

#6


修改其中一个变量的名字使他们被区分开来。如果在一起的两个人的名字读音一样,他们两个人也是不能分辨出是谁正在被呼唤的,更何况是机器

#7


引用楼主 zxycbz 的帖子:
如果在一个文件中局部变量和全局变量同名

在函数中怎么引用全局变量


局部会屏蔽全局。
要用全局变量,需要使用"::"

局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。

#8


域运算符::解决

使用同名变量会导致程序的可读性很差,强烈建议楼主用不同的变量名。

#9


在C中没法解决,局部变量会将全局变量屏蔽,在C++中可以用到::运算符

#10


如果只是使用而不对全局变量赋值的话, 用个函数加个宏定义吧.
如果还需要对全局变量赋值, 就要多加一个函数了.
比如:

#include <stdio.h>

int x = 8;
int g_x(void) {return x;}
int g_x_set(int v) {x = v;}
#define g_x g_x()

int main()
{
    int x = 3;

    printf("g_x = %d, x = %d\n", g_x, x);

    g_x_set( x << 1);
    x = g_x << 1;
    printf("g_x = %d, x = %d\n", g_x, x);
    return (0);
}

#11


C++中用::就OK了,

#12


int val = 10;

int get_val()
{
    return val;
}

void test()
{
    int val = 5;
    .....
    get_val();   /* 得到的是全局的val */
}

#13


int val = 10;

int get_val()
{
    return val;
}

void test()
{
    int val = 5;
    .....
    get_val();   /* 得到的是全局的val */
}

#14


C++中直接默认的是局部变量,如果要永全局变量就用::变量就可以了

#15


局部变量和全局变量同名,是极不规范的做法

#16



#include <stdio.h>

int x = 8;


int main()
{
    if(1==1)
    {
       int x = 3;
    }
    return x;//此处为8;
}



#17


以上方法导致局部变量不可用。建议不用同名变量。我的新手看法!

#18


C++中用::就OK

#19


引用 10 楼 mymtom 的回复:
如果只是使用而不对全局变量赋值的话, 用个函数加个宏定义吧.
如果还需要对全局变量赋值, 就要多加一个函数了.
比如:
C/C++ code#include<stdio.h>intx=8;intg_x(void) {returnx;}intg_x_set(intv) {x=v;}#defineg_x g_x()intmain()
{intx=3;

    printf("g_x = %d, x = %d\n", g_x, x);

    g_x_set( x<<1);
    x=g_x<<1;
    printf("g_x = %d, x = %d\n", g_x, x);return(0);
}


支持

#20


局部变量和全局变量同名的时候,两个在地址空间的位置是不同的,

#21


而且利用VS2010编译的话,在C中可以用作用于标示符来标示某一变量是全局变量
static int a = 5;
int b = 10;
int *p = &b;
int func()
{
printf("%d\n",a);
int b = 5;
/* if(p == &b) //局部变量和全局变量同名的时候,如果没有指明是全局变量,则指的是局部变量
printf("%d\n",b);*/
printf("%d\n",::b); //如果要指名是全局变量,则用::来引用全局变量
return 0;
}
int main()
{
func();
return 0;
}
输出结果是5,10

#22


改名吧,简单有效。

#1


::变量名
C++

#2


在C中呢?怎么处理

#3


事先用一个指针指向那个全局变量!

#4


还有没有其他的方法

#5


局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。

所以是没有办法的.

#6


修改其中一个变量的名字使他们被区分开来。如果在一起的两个人的名字读音一样,他们两个人也是不能分辨出是谁正在被呼唤的,更何况是机器

#7


引用楼主 zxycbz 的帖子:
如果在一个文件中局部变量和全局变量同名

在函数中怎么引用全局变量


局部会屏蔽全局。
要用全局变量,需要使用"::"

局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。

#8


域运算符::解决

使用同名变量会导致程序的可读性很差,强烈建议楼主用不同的变量名。

#9


在C中没法解决,局部变量会将全局变量屏蔽,在C++中可以用到::运算符

#10


如果只是使用而不对全局变量赋值的话, 用个函数加个宏定义吧.
如果还需要对全局变量赋值, 就要多加一个函数了.
比如:

#include <stdio.h>

int x = 8;
int g_x(void) {return x;}
int g_x_set(int v) {x = v;}
#define g_x g_x()

int main()
{
    int x = 3;

    printf("g_x = %d, x = %d\n", g_x, x);

    g_x_set( x << 1);
    x = g_x << 1;
    printf("g_x = %d, x = %d\n", g_x, x);
    return (0);
}

#11


C++中用::就OK了,

#12


int val = 10;

int get_val()
{
    return val;
}

void test()
{
    int val = 5;
    .....
    get_val();   /* 得到的是全局的val */
}

#13


int val = 10;

int get_val()
{
    return val;
}

void test()
{
    int val = 5;
    .....
    get_val();   /* 得到的是全局的val */
}

#14


C++中直接默认的是局部变量,如果要永全局变量就用::变量就可以了

#15


局部变量和全局变量同名,是极不规范的做法

#16



#include <stdio.h>

int x = 8;


int main()
{
    if(1==1)
    {
       int x = 3;
    }
    return x;//此处为8;
}



#17


以上方法导致局部变量不可用。建议不用同名变量。我的新手看法!

#18


C++中用::就OK

#19


引用 10 楼 mymtom 的回复:
如果只是使用而不对全局变量赋值的话, 用个函数加个宏定义吧.
如果还需要对全局变量赋值, 就要多加一个函数了.
比如:
C/C++ code#include<stdio.h>intx=8;intg_x(void) {returnx;}intg_x_set(intv) {x=v;}#defineg_x g_x()intmain()
{intx=3;

    printf("g_x = %d, x = %d\n", g_x, x);

    g_x_set( x<<1);
    x=g_x<<1;
    printf("g_x = %d, x = %d\n", g_x, x);return(0);
}


支持

#20


局部变量和全局变量同名的时候,两个在地址空间的位置是不同的,

#21


而且利用VS2010编译的话,在C中可以用作用于标示符来标示某一变量是全局变量
static int a = 5;
int b = 10;
int *p = &b;
int func()
{
printf("%d\n",a);
int b = 5;
/* if(p == &b) //局部变量和全局变量同名的时候,如果没有指明是全局变量,则指的是局部变量
printf("%d\n",b);*/
printf("%d\n",::b); //如果要指名是全局变量,则用::来引用全局变量
return 0;
}
int main()
{
func();
return 0;
}
输出结果是5,10

#22


改名吧,简单有效。