| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1401 人关注过本帖
标题:全局变量的使用疑问
只看楼主 加入收藏
ebony
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2011-1-26
结帖率:55.56%
收藏
已结贴  问题点数:5 回复次数:10 
全局变量的使用疑问
全局变量定义有些疑惑,请各位高手帮助解答一下哈.

疑惑1: 全局变量定义在那里?
方式1:
a.c                 b.c                common.h
int ta = 0;       float tb = 0.0;      extern int ta; extern float tb;

方式2:
a.c                b.c                 common.h            main.c
include "common.h"  same as a.c        extern int ta;       int ta = 0;
                                       extern float tb;     float tb = 1.0;

即我想问的是,将全局变量分别声明,定义在不同的文件中好呢, 还是集中声明,定义于 一个文件中好呢.
搜索更多相关主题的帖子: 声明 
2011-02-04 04:02
ebony
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2011-1-26
收藏
得分:0 
看到网上有个人写的文章,建议全局变量这样用:

a.c                 b.c                    main.c            main.h
include "main.h"                                            float tb;  //Declare here
extern int ta;      extern float tb;      int ta = 0;        int ta;    //Declare here
                                         float tb = 2.0;
据讲这样的好处是可以验证全局变量是否已经定义. 而不是用extern int xxx也可以通过编译, 而XXX并没有在程序的任何文件中被定义, 是个不存在的变量.
但我感觉这样,在a.c, b.C 经过预处理后, 不是有这样的代码吗?
a.c
int ta;
float tb;
extern int ta;

即ta被声明了两次.

2011-02-04 04:08
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:3 
声明几次无所谓。这个文件划分,一般是根据你的模块设计来的。

理论上怎么放都可以,但事实上自然地分散在合适的位置比较好,逻辑紧密的放到一起。
最起码要考虑到阅读和维护源码的时候,对代码相对陌生的程序员能够在可以联想到的文件中找到变量的定义。

一般可以遵循类似的原则:
减少全局变量的使用,除非非常必要。(你可以去查查一般在什么情况下使用全局变量)。
将全局变量声明在一处,并使用空行将全局变量的声明划分成出模块层次。或各个模块会用到的全局变量分别声明在一处。
如果一个变量再多个模块中使用。可以在每个模块中都声明一次。以减少头文件的交叉包含。
在声明的变量后用注释的方式,给出变量的定义位置。

这个很灵活,一般没有通用的做法。设计是很研究的,在模块的划分上,可以充分体现一个程序员的品味。
2011-02-04 17:55
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
感觉你 2楼 讲的那个说法有点莫名其妙,我认为不用担心全局变量没有定义的问题。没定义的话链接的时候会报错的。
不过这东西不同的程序员确实有不同的做法。
2011-02-04 17:59
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:3 
这个东西 说不清楚的

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2011-02-04 18:03
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
以下是引用vandychan在2011-2-4 18:03:18的发言:

这个东西 说不清楚的


同意。

如果楼主是初学者的话,不建议太关心这方面的问题。

就跟学素描似的,老师呀书上讲的都排线呀,透视之类的东西。有的老师或书籍可能会介绍构图之类的东西,但一般都是一笔带过,讲的比较少。不是说这个没用,这是这个没什么可讲的。刚学画画的人学再多相关的理论也画不好画。而画几年之后,不学也形成了自己的一套构图风格了。顶多到那时再学点理论呀跟别人讨论讨论经验什么的,有经验了之后,这些东西都不会太差的。一般没听说过什么人,画东西栩栩如生,但构图一塌糊涂的。
2011-02-04 18:19
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:0 
pangding最近很给力啊

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2011-02-04 18:22
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
放假了吗~~

其实是最近过年,老串亲戚。大人们聊天呗,我插不上话就自己上会网。过阵子回自己家就忙活了。
2011-02-04 18:49
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:0 
不错啊

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2011-02-04 18:53
ebony
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2011-1-26
收藏
得分:0 
我写的是单片机程序,感觉用全局变量还是有其优势的.

可以减少调用函数的时候的压栈,出堆栈的时间. 不知版主有什么看法?
2011-02-04 23:47
快速回复:全局变量的使用疑问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040831 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved