没有影响。在局部变量i的作用域内,取值和赋值都是针对局部变量i的,不会影响全局变量i。
在局部变量i作用域之外,取值和赋值都是针对全局变量i的,不会影响局部变量i。
局部变量的作用域为,从定义该局部变量的位置开始,到定义该变量语句所在的{}对结束。
比如如下函数:
void func()//1
{//2
int a = 1;//3
expr1; //4
if(expr2)//5
{//6
int b=1;//7
expr3;//8
int c = 2; //9
expr4;//10
}//11
}//12
该代码共有12行,其中:
a定义于第3行,所在{}对为2-12行,其作用域就是从3行到12行。
b定义于第7行,所在{}对为6-11行,其作用域就是从7-11行。
c定义于第9行,所在{}对为6-11行,其作用域就是从9-11行。
#define int i;
这种方式是不可以的,define后面接的第一个单词是宏名,和变量名一样,不能使用关键字
剩下的可以执行
对于全局和局部变量同名,涉及到作用域的问题
在这个函数中,因为有局部变量int i,那么在main中 全局变量int i等于无效
可以做这样的一个程序加深理解
int i = 3;
void main()
{
printf("%d\n", i);
{
int i = 4;
printf("%d\n", i);
}
printf("%d\n", i);
}
会打印出
3
4
3
1,声明于内层代码块的标识符的作用域到达该代码块尾部便终止。
即,main中声明的i只在main函数内部有效。
2,如果内层代码有一个标识符与外层代码块的一个标识符相同,则内层的标识符会将外层的
标识符隐藏———外层标识符无法在内层代码块中通过名字访问。
即,main中的i与全局变量i不是同一个东西,虽然名字相同。在main中改变i的值,全局变量i不会改变。实质上他们是不同的变量。
你的代码在VC6.0是无法通过的,宏定义应该是不能使用关键字的吧。
至少我这无法通过。
局部变量和全局变量在程序中是可以共存的。在函数或过程中,如果有局部变量i,则局部变量起作用。
没有影响
局部变量和全局变量重名时,局部变量自动覆盖全局变量,也就是此时访问到的是局部变量,不会对全局变量造成更改
但不建议这样编写程序,编译器一般也会给出警告