忘记密码   免费注册 查看新帖 | 论坛精华区
ChinaUnix.net
  平台论坛 博客 微博 读书 人才 精华 文库 自测 | 频道操作系统 开发 数据库 存储 服务器 网络 IT新闻 Linux 下载 Power用户组
最近访问板块 发新帖
查看: 2255 | 回复: 20

让我费解的 Static 全局变量变量 [复制链接]
更多

Rank: 1

帖子
99
主题
26
精华
0
可用积分
408
专家积分
0
在线时间
344 小时
注册时间
2008-08-15
最后登录
2012-01-18
论坛徽章:
0
发表于 2009-07-02 14:56:17 |显示全部楼层
5可用积分
今天在调试一个程序的时候,突然发现 static 变量不受自己控制了。
是这样子的,由于工作的关系不方便把代码贴出来,不好意思:
一个工程生成的是lib文件,工程中有个一个CPP文件
CPP文件里定义了一个全局的静态变量 static bool HighTimerRec。
在这个CPP中有个函数调用这个 变量的值,还有另外的一个函数对这个变量赋值。
大概的代码是下面的:
//timer.cpp

static bool HighTimerRec

void Sys_Init()
{
    if (something)
    {
     HighTimerRec = true;
     ........
     }
     .....
}


问题就是我明明调用了这个函数把它的值赋了true,而且没有别的地方赋这个值为false。可是我在别的代码中判断这个变量的值的时候,是 false,很让我费解。希望大家能够答疑  :)

最佳答案

urapple 查看完整内容

把它初始化成true再看看 static bool HighTimerRec=true;
离开了JAVAEYE,CSDN!CU是我的基地了。

Rank: 1

帖子
226
主题
14
精华
0
可用积分
480
专家积分
35
在线时间
100 小时
注册时间
2009-01-04
最后登录
2011-07-07
论坛徽章:
0
发表于 2009-07-02 14:56:18 |显示全部楼层

回复 #1 singerinsky 的帖子

把它初始化成true再看看
static bool HighTimerRec=true;
默默杀五毛

Rank: 10Rank: 10Rank: 10

帖子
35134
主题
7184
精华
5
可用积分
51087
专家积分
1416
在线时间
3388 小时
注册时间
2005-07-19
最后登录
2010-11-24
论坛徽章:
0
发表于 2009-07-02 15:15:43 |显示全部楼层
有没有跨文件?

Rank: 1

帖子
99
主题
26
精华
0
可用积分
408
专家积分
0
在线时间
344 小时
注册时间
2008-08-15
最后登录
2012-01-18
论坛徽章:
0
发表于 2009-07-02 15:27:51 |显示全部楼层
对这个变量的操作都是在这个CPP中完成的。其他的地方没有引用到。不过这个lib的工程是被多个其他的工程引用到的。
离开了JAVAEYE,CSDN!CU是我的基地了。

Rank: 1

帖子
226
主题
29
精华
0
可用积分
234
专家积分
0
在线时间
158 小时
注册时间
2007-03-02
最后登录
2011-04-23
论坛徽章:
0
发表于 2009-07-02 15:34:14 |显示全部楼层
有没有地方越界了,把它的值给变了?

Rank: 3Rank: 3

帖子
797
主题
33
精华
0
可用积分
2334
专家积分
5
在线时间
361 小时
注册时间
2003-07-14
最后登录
2011-09-09
论坛徽章:
0
发表于 2009-07-02 15:36:37 |显示全部楼层
原帖由 prolj 于 2009-7-2 15:15 发表
有没有跨文件?


你让我想起了“跨省”~~~
触目惊心~~~
开源应用服务器开发库:
Application Server Development Library Project:
http://libasdl.sourceforge.net
南无阿弥陀佛

Rank: 8Rank: 8

帖子
19062
主题
2758
精华
0
可用积分
10933
专家积分
2167
在线时间
3063 小时
注册时间
2008-06-13
最后登录
2012-02-02
论坛徽章:
0
发表于 2009-07-02 15:38:49 |显示全部楼层
程序BUG。
穷则独善其身,达则兼济天下。鞋儿破,帽儿破,身上的袈裟破, 你笑我,他笑我,一把扇儿破。南无阿弥陀佛,南无阿弥陀佛。

Rank: 1

帖子
99
主题
26
精华
0
可用积分
408
专家积分
0
在线时间
344 小时
注册时间
2008-08-15
最后登录
2012-01-18
论坛徽章:
0
发表于 2009-07-02 15:42:53 |显示全部楼层
原帖由 ziggler 于 2009-7-2 15:38 发表
程序BUG。

bug应该是 bug,可悲的是我找不到bug的问题唉。
现在我用
namespace
{
   static bool iHighTimerRec = Function();
}

bool Function()
{
   if(...)
   {
     return true;
   }
   return false;
}

做了下。好像还可以用的。
离开了JAVAEYE,CSDN!CU是我的基地了。
广告混混

Rank: 3Rank: 3

帖子
697
主题
44
精华
0
可用积分
2651
专家积分
0
在线时间
200 小时
注册时间
2004-11-26
最后登录
2010-02-27
论坛徽章:
0
发表于 2009-07-02 15:48:28 |显示全部楼层
是同一个变量吗?

你在赋值的地方和判断的地方都把这个变量的地址打印出来看看呢

Rank: 1

帖子
99
主题
26
精华
0
可用积分
408
专家积分
0
在线时间
344 小时
注册时间
2008-08-15
最后登录
2012-01-18
论坛徽章:
0
发表于 2009-07-02 16:17:04 |显示全部楼层
原帖由 bobozhang 于 2009-7-2 15:48 发表
是同一个变量吗?

你在赋值的地方和判断的地方都把这个变量的地址打印出来看看呢

有道理,我试试看。
离开了JAVAEYE,CSDN!CU是我的基地了。
您需要登录后才可以回帖 登录 | 注册

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP