打印

静态全局变量问题

[复制链接]
1174|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
txcy|  楼主 | 2013-10-29 16:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我先在头文件CAttemperEngineSink.h中声明的静态变量:
static INT isGetBetPool=0;

又在CInitSystemDlg.cpp中改变变量isGetBetPool++;(CInitSystemDlg与CAttemperEngineSink在同一个项目中)

最后在CAttemperEngineSink.cpp中调用:
int i=isGetBetPool;

问题:我在调试的时候却发现最后调用的时候isGetBetPool为1,但i却是0,这是为啥?

相关帖子

沙发
无冕之王| | 2013-10-29 16:20 | 只看该作者
“变量赋值”和“变量初始化”不是一回事!
“变量赋值”发生在运行期,其写法遵循赋值语法规定。
“变量初始化”发生在编译期或运行期,其写法遵循初始化列表语法规定。

使用特权

评论回复
板凳
pkat| | 2013-10-29 16:38 | 只看该作者
static INT isGetBetPool=0;
isGetBetPool 是内部链接呀. 在每个cpp文件里,isGetBetPool是独立的.
建议楼主谷歌下内部链接与外部链接,彻底搞明白这个问题

使用特权

评论回复
地板
火箭球迷| | 2013-10-29 16:41 | 只看该作者
这样情况还是用 extern

包含一个H头文件就多一个变量cop

使用特权

评论回复
5
戈卫东| | 2013-10-29 19:05 | 只看该作者
全局变量本来就是静态,再加一个static其实它会变成只有当前文件可见.于是包含了头文件的CPP都会有自己的定义....

使用特权

评论回复
6
comeon201208| | 2013-11-10 20:39 | 只看该作者
最好不要直接在.h文件中申明变量的,在.c开头申明,可在.h文件中引申就可以啦

使用特权

评论回复
7
comeon201208| | 2013-11-10 20:40 | 只看该作者
这个是跟单片机分配内存有直接的关系的啊

使用特权

评论回复
8
firstblood| | 2013-11-15 00:11 | 只看该作者
无冕之王 发表于 2013-10-29 16:20
“变量赋值”和“变量初始化”不是一回事!
“变量赋值”发生在运行期,其写法遵循赋值语法规定。
“变量初 ...

哦,我也了解下的了,这方面的我在调试程序的时候有时也很郁闷的,主要也是出现这样的问题的

使用特权

评论回复
9
smilingangel| | 2013-11-18 20:08 | 只看该作者
全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全局变量定义的源文件需要用extern关键字再次声明这个全局变量。

静态局部变量具有局部作用域。它只被初始化一次,自从第一次初始化直到程序与你新内阁结束都一直存在,他和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。

使用特权

评论回复
10
smilingangel| | 2013-11-18 20:09 | 只看该作者
这个是二者的区别的,这样应该很好理解了啊

使用特权

评论回复
11
smilingangel| | 2013-11-18 20:12 | 只看该作者
静态全局变量也具有全局作用域,他与全局变量的区别在于如果程序包含多个文件的话,他作用于定义它的文件里,不能作用到其他文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同的静态全局变量,他们也是不同的变量。

使用特权

评论回复
12
smilingangel| | 2013-11-18 20:12 | 只看该作者
变量用static告知编译器,自己仅仅在变量的作用域范围内可见。这一点是他与全局变量的区别。

使用特权

评论回复
13
smilingangel| | 2013-11-18 20:12 | 只看该作者
把局部变量改变为静态变量后是改变了他的存储方式,即改变了他的生存期。把全局变量改变为静态变量后是改变了他的作用域,限制了他的使用范围,因此static这个说明符在不同的地方起的作用是不同的。

使用特权

评论回复
14
smilingangel| | 2013-11-18 20:13 | 只看该作者
函数中必须要使用static变量的情况:当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。

使用特权

评论回复
15
ayb_ice| | 2013-11-21 17:17 | 只看该作者
没有外部的静态变量之说

使用特权

评论回复
16
ayb_ice| | 2013-11-21 17:21 | 只看该作者
smilingangel 发表于 2013-11-18 20:13
函数中必须要使用static变量的情况:当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返 ...

片面了,

如:
函数中产生了数据,动态分配内存,内存保存数据,通过指针返回给调用者处理,调用者处理后通过指针释放内存,这很常用的

使用特权

评论回复
17
vivilzb1985| | 2013-11-25 20:00 | 只看该作者
smilingangel 发表于 2013-11-18 20:08
全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全 ...

介绍的非常不错的,我也参考下的了

使用特权

评论回复
18
vivilzb1985| | 2013-11-25 20:00 | 只看该作者
smilingangel 发表于 2013-11-18 20:08
全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全 ...

介绍的非常不错的,我也参考下的了

使用特权

评论回复
19
shenmu2012| | 2013-11-26 23:25 | 只看该作者
smilingangel 发表于 2013-11-18 20:08
全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全 ...

楼上介绍的非常不错的,我借鉴下的了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

274

主题

2106

帖子

0

粉丝