函数内部的extern为什么会使用全局的变量
时间:2011-12-17
来源:互联网
#include <iostream>
using namespace std;
int x = 5;
int f()
{
int x = 3;
{
extern int x;
return x;
}
}
int main()
{
cout<<f()<<endl;
}
这里为什么输出5呢?
作者: Daisy_Chain 发布时间: 2011-12-17
作者: mougaidong 发布时间: 2011-12-17
extern 声明告诉了编译器,这个范围内用了一个外部变量叫x,让后编译器到外边找到了一个x
extern int x;不是在一个作用域中(它和return一起包围在一个花括号中)吗?相对于此,那f()中的int x = 3;也算是外部的阿!而且,如果你将包围住它的括号去掉的话会出错。
int f()
{
int x = 3;
extern int x;
return x;
}
--------------------------------------
g++ hello.cpp -o tst
hello.cpp: In function ‘int f()’:
hello.cpp:10: error: declaration of ‘int x’
hello.cpp:8: error: conflicts with previous declaration ‘int x’
这又是什么原因?
作者: Daisy_Chain 发布时间: 2011-12-17
using namespace std;
int x = 5;///所以大括号外面的变量具有外部链接属性(不能称之为外部变量吧)
int f()
{
int x = 3;内部链接属性
{
extern int x;/////显示的将x设置为外部链接属性
return x;
}
}
int main()
{
cout<<f()<<endl;
}
作者: quan958201599 发布时间: 2011-12-17
#include <iostream> using namespace std; int x = 5; namespace ns { int x = 3; int f() { extern int x; return x; } } int main() { cout << ns::f() << endl; }
作者: mougaidong 发布时间: 2011-12-17
extern int x; //重新声明x,且是外部变量(全局的),这个x的作用域为{}之间
return x;
}
作者: keiy 发布时间: 2011-12-17
#include <iostream>
using namespace std;
int x = 5;///所以大括号外面的变量具有外部链接属性(不能称之为外部变量吧)
int f()
{
int x = 3;内部链接属性
{
extern int x;/////显示的将x设置为外部链接属性
return x;
}
}
int main()
……
我可以这样认为吗:在不同域中有两个名为x的变量,虽然名称相同,但是性质不同。使用extern int x;就是为了声明使用具有外部链接属性的那个x。
作者: Daisy_Chain 发布时间: 2011-12-17
引用 3 楼 quan958201599 的回复:
#include <iostream>
using namespace std;
int x = 5;///所以大括号外面的变量具有外部链接属性(不能称之为外部变量吧)
int f()
{
int x = 3;内部链接属性
{
extern int x;/////显示的将x设置为外部链接属性
return x;
}……
++
作者: quan958201599 发布时间: 2011-12-17
C/C++ code
#include <iostream>
using namespace std;
int x = 5;
namespace ns
{
int x = 3;
int f()
{
extern int x;
return x;
}
}
int main()
{
cout << ns::f() <……
4L输出的结果是3
作者: Daisy_Chain 发布时间: 2011-12-17
作者: quan958201599 发布时间: 2011-12-17
其实我也有个疑问,是不是之所以函数内部的声明为外部链接属性的变量指向的是全局变量中的x=5而不是x=3是不是全局变量是存在堆中,而局部变量是存在栈中的
好长的一句话,全局变量好像是存储在静态区的吧。
作者: Daisy_Chain 发布时间: 2011-12-17
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28