2 mengxiang tianji mengxiang_tianji 于 2016.03.27 14:34 提问

C++变量作用域匹配以及inline函数问题

int value = 2;
void printvalue()
{
printf("value=%d\n", value);
}
int main()
{
int value = 0;
value = 1;
cout << value << endl;
//::value = 2;
printvalue();
return 0;
}
为什么函数中的输出为value=2,value匹配了全局变量而不是局部变量?而将printvalue改为含有一个参数的函数,传入变量value则匹配局部变量?:
void printvalue(int vaule)
{
printf("value=%d\n", value);
}
int main()
{
int value = 0;
value = 1;
printvalue(value);
return 0;
}
inline函数在编译的时候会自动展开,为什么下面的两个输出却不一样?
void printvalue()
{
printf("value=%d\n", value);
}
int main()
{
int value = 0;
value = 1;
printf("value=%d\n", value);
return 0;
}

inline void printvalue()
{
printf("value=%d\n", value);
}
int main()
{
int value = 0;
value = 1;
printvalue();
return 0;
}

3个回答

huatian5
huatian5   2016.03.27 14:48

变量要看就近性,你那个全局变量和局部变量的范围是不一样的又没有传参数。如果给函数传参了,就看参数的范围。
还有你的代码中没有inline函数啊/

mengxiang_tianji
mengxiang_tianji 是不是inline展开相当于附带把函数总的花括号也加上?
一年多之前 回复
mengxiang_tianji
mengxiang_tianji 是不是inline展开相当于附带把函数总的花括号也加上?
一年多之前 回复
mengxiang_tianji
mengxiang_tianji 谢谢回答,inline已经改正了
一年多之前 回复
skaitiaozhan
skaitiaozhan   2016.03.27 16:50

考虑代码段和bss段

mengxiang_tianji
mengxiang_tianji 可以讲具体一点吗?
一年多之前 回复
CSDNXIAOD
CSDNXIAOD   2016.03.30 11:26

函数的变量作用域
一个问题,关于函数嵌套后的变量作用域
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!