打印

C语言中关于全局变量的问题

[复制链接]
3742|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qianlong30|  楼主 | 2007-1-17 20:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
zhichengdz| | 2007-1-17 20:07 | 只看该作者

不一定

使用特权

评论回复
板凳
qianlong30|  楼主 | 2007-1-17 20:11 | 只看该作者

RE:

能详细说一下吗?

使用特权

评论回复
地板
王紫豪| | 2007-1-17 20:34 | 只看该作者

static

使用特权

评论回复
5
qianlong30|  楼主 | 2007-1-17 20:49 | 只看该作者

RE

file1.c中
extern uchar scan()

interrupt comm()
{
  count++;      //计数器在中断中增1
 ....
}

main()
{
...
i=scan();
...
}


file2.c中
uchar scan()
{...
  while(!count==10)   //等待直到10次中断
  ...
 }


那这个count在哪个文件中定义,怎样定义?
如果scan()同中断函数在同一文件又该怎样定义?
初接触C,请赐教.


使用特权

评论回复
6
lishuanghua| | 2007-1-18 08:30 | 只看该作者

要全局变量

静态变量虽说也独占内存,但不能被别的函数使用。在哪个文件定义都一样,别的文件要使用需要先声明为外部变量。

使用特权

评论回复
7
qianlong30|  楼主 | 2007-1-18 19:47 | 只看该作者

re

就是说中断程序中用到的变量必须是设置成全局变量?

使用特权

评论回复
8
lishuanghua| | 2007-1-19 08:23 | 只看该作者

如果只是中断程序用可以是局部变量

如果要保存到下一次中断用,可以用静态变量,如果要给后台程序用就需要全局变量

使用特权

评论回复
9
ronic| | 2007-1-19 12:27 | 只看该作者

while(!count==10) //等待直到10次中断

这句改成while(! count > 10)   //等待直到10次中断

会更合理一些

使用特权

评论回复
10
liuliyong5| | 2007-1-20 12:47 | 只看该作者

最好定义成volatile的全局变量

因为只要在中断程序里面修改了VOLATILE的全局变量,在其他程序里面用到的时候,就VOLATILE变量肯定是最新的数据,但是只能在中断程序里面对他进行修改
--请大家指教

使用特权

评论回复
11
nertz| | 2007-1-20 20:12 | 只看该作者

8楼说的是

使用特权

评论回复
12
lishuanghua| | 2007-1-22 08:14 | 只看该作者

liuliyong5说得很有道理

用volatile定义的变量编译器不会放在寄存器里面,这样可以保证中断改过后后台程序能得到最新的数据。

使用特权

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

本版积分规则

149

主题

349

帖子

2

粉丝