这个题如何实现???

wwbbqq 2010-01-01 01:30:43

这题是在《C语言深度剖析》书中看到的,[color=#00FF00]我不知道如何实现作者所说的各源文件负责自己的全局变量,并提供一对对外函数方便其它函数访问变量。请高手指点下,有例程就万分感谢啦![/color]
...全文
161 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zaf797979 2010-01-02
  • 打赏
  • 举报
回复
全局变量滥用会导致很多问题,比如程序的可读性变差、出错的可能性变大
全局变量就像暴露在外的靶子一样,哪儿都可以打,所以很危险
jernymy 2010-01-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hbvanguard 的回复:]
都知道c#和java里面有get和set来操作全局变量,我想这里说的就是这个意思
用c语言实现
C/C++ code//test.hint testVal;int niGet_testVal();void niSet_testVal(int);//test.cppint niGet_testVal()
{return testVal;
}void niSet_testVal(int value)
{
testVal= value;
}//result.cpp#include"test.h"externint niGet_testVal();externvoid niSet_testVal(int);//这样result就可以通过niGet_testVal和niSet_testVal访问testVal变量了
[/Quote]

Contemplating 2010-01-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hbvanguard 的回复:]
都知道c#和java里面有get和set来操作全局变量,我想这里说的就是这个意思
用c语言实现
C/C++ code//test.hint testVal;int niGet_testVal();void niSet_testVal(int);//test.cppint niGet_testVal()
{return testVal;
}void niSet_testVal(int value)
{
testVal= value;
}//result.cpp#include"test.h"externint niGet_testVal();externvoid niSet_testVal(int);//这样result就可以通过niGet_testVal和niSet_testVal访问testVal变量了
[/Quote]
我觉得书上说得是正确的。
macrojj 2010-01-02
  • 打赏
  • 举报
回复
函数不要加extern啦
东大坡居士 2010-01-01
  • 打赏
  • 举报
回复
限制全局变量只在本文件中使用,需要在全局变量前加上static修饰,别的文件若要使用在通过函数
cattycat 2010-01-01
  • 打赏
  • 举报
回复
当然不是那么绝对,有时候用全局变量问题会简单的多。

a.h
void setXXXValue(int);

a.cpp

int g_var;
void setXXXValue(int var )
{
g_var=var;
}

b.h
#include "a.h"

他这说的是这个意思。实际上在多线程中,这种方式根本不能保证不会冲突,还是需要加锁,或临界区控制互斥访问。以前那种写法也一样。所以重要的是你知道程序如何工作就行。
hzy694358 2010-01-01
  • 打赏
  • 举报
回复
貌似是说:哪个文件定义的全局变量就在哪个文件用
尽量不要跨文件使用

但是如果多线程的话,其实很多时候是要用到跨文件的全局变量的,
只是线程同步要做好,否则到时候出问题就不好查了
hbvanguard 2010-01-01
  • 打赏
  • 举报
回复
都知道c#和java里面有get和set来操作全局变量,我想这里说的就是这个意思
用c语言实现

//test.h
int testVal;
int niGet_testVal();
void niSet_testVal(int);
//test.cpp
int niGet_testVal()
{
return testVal;
}
void niSet_testVal(int value)
{
testVal = value;
}

//result.cpp
#include "test.h"
extern int niGet_testVal();
extern void niSet_testVal(int);

//这样result就可以通过niGet_testVal和niSet_testVal访问testVal变量了
traceless 2010-01-01
  • 打赏
  • 举报
回复
然也,SetXXX GetXXX不是很好吗,在前面还加什么东东,不好,很不推荐
traceless 2010-01-01
  • 打赏
  • 举报
回复
A.h
static int g_nCout = 0;
int GetCount(); //对本文件的全局变量进行封装,对外提供GetCount这个接口

B.h
extern int GetCount(); //告诉编译器,使用的是外部文件的函数

do_fork 2010-01-01
  • 打赏
  • 举报
回复
书上说错了,多线程环境中,也可以用全局变量的,并非必须用setter和getter。
ni_Set_ValueName这个变量命名方式也太差劲了,起码可以弄个SetValueName,或者
弄一个set_value_name,或者setValueName,都要比这个不伦不类的好很多。

如果真的胆小如鼠,就不要用C也不要用C++,直接用Java多好,
没有指针,全局变量也被阉割,连goto都给你取消掉了

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧