您的位置:程序门 -> c/c++ -> c++ 语言



为什么在多文件结构中定义的全局变量会是不同的值?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


为什么在多文件结构中定义的全局变量会是不同的值?
发表于:2008-01-14 12:53:45 楼主


程序如下:

程序文件1:
#include <iostream>
int   n   =   8;
void   f();
int   main(){
std::cout < <n < <"\n";
f();
}

程序文件2:
#include <iostream>

int   n;
void   f(){
  std::cout < <n < <"\n";
}

输出内容为:
8
0

很纳闷,既然全局变量都是在全局数据区定义的,那么在文件1和文件2中定义的变量n,应该是一个啊,为什么输出内容却不一样呢?
发表于:2008-01-14 12:58:161楼 得分:0
先问一下,有没有链接错误?
发表于:2008-01-14 12:59:222楼 得分:0
因为你的写法是错的.   居然通过编译了,   只能说明你的编译器不符合标准.

程序2里面应该用
extern   int   n;
发表于:2008-01-14 12:59:413楼 得分:0
你定义的全局变量的作用域是从声明处开始到整个文件结束,如果是其它的文件中是看不到它的,所以如果文件2和文件1中的n是不一样的。如果你文件2想引用文件1中的n,可以在文件2中用extern把n声明为外部变量。
发表于:2008-01-14 13:08:584楼 得分:0
文件中的变量的作用域   和   所谓的全局变量的作用域是不一样的。
全局变量在全局数据区定义是说的内存里面。
这里还有一个命名空间的问题。
你可以参考一下extern   的应用。
发表于:2008-01-14 13:19:195楼 得分:0
呵呵,我明白了。

谢谢大家的帮助。
发表于:2008-01-16 19:39:306楼 得分:0
二楼的问得好.
你这样链接时不出错么?
如果不是全局常量对象,在不同文件中重复定义(注意,不是extern声明),在链接时是会出错的
编译时会通过.因为编译一次只处理一个文件
to   3楼:
你说的那种情况要声明为static才行.而不声明的话,是不会像你说的那样的.
同一个程序的全局对象是在不同的文件中都可见.但是,因为编译器处理的关系.所以,要到链接时才能体现出来
因此,非const的全局对象不可在不同文件中重复定义
发表于:2008-01-16 19:40:357楼 得分:0
看错了,应该是一楼的问得好


快速检索

最新资讯
热门点击