Board logo

标题: 全局变量如何定义? [打印本页]

作者: fjczd    时间: 2008-12-16 16:05     标题: 全局变量如何定义?

codewarrior下有两个.c文件,分别为eeprom.c和Evenrs.c.

现在要从eeprom.c中调用Evenrs.c中的某个变量,请问该如何用呢?

我现在在eeprom.c的开始定义了extern char sFlag;.编译时系统报错,说在Evenrs.c.中的sFlag没有定义.

这该如何解决呢?

程序见附件

KCO8IeRq.rar (675.24 KB)


附件: [全局变量如何定义?] KCO8IeRq.rar (2008-12-16 15:45, 675.24 KB) / 下载次数 577
http://bbs.eccn.com/attachment.php?aid=5930&k=a36558761db98c928121b003d88e8ad2&t=1732500801&sid=QgxF6X
作者: luoman    时间: 2008-12-16 16:08

看看


作者: luoman    时间: 2008-12-16 16:09

我在C里面学过

不过好久不用了


作者: fjczd    时间: 2008-12-16 16:10

这个也是c啊
作者: luoman    时间: 2008-12-16 16:12

全局变量一般在程序的开头定义 作用于整个程序


作者: fjczd    时间: 2008-12-16 16:20

放在开头了,好像不行

我现在把它放到了.h文件里了,至少编译没报错.

不知道时不时该这样做

请各位高手发表意见


作者: luoman    时间: 2008-12-16 16:23

编译不报错 那就应该没有问题的 奇怪


作者: luoman    时间: 2008-12-16 16:23

一般来说C 的书写是比较严格的  你在好好检查一下看看
作者: fjczd    时间: 2008-12-16 16:39

QUOTE:
以下是引用fjczd在2008-12-16 16:20:00的发言:

放在开头了,好像不行

我现在把它放到了.h文件里了,至少编译没报错.

不知道时不时该这样做

请各位高手发表意见

编译虽然通过,但实际运行时,并不能把数据传过来.


作者: fjczd    时间: 2008-12-16 16:39

QUOTE:
以下是引用fjczd在2008-12-16 16:20:00的发言:

放在开头了,好像不行

我现在把它放到了.h文件里了,至少编译没报错.

不知道时不时该这样做

请各位高手发表意见

QUOTE:
以下是引用luoman在2008-12-16 16:23:00的发言:
一般来说C 的书写是比较严格的 你在好好检查一下看看

编译虽然通过,但实际运行时,并不能把数据传过来.

看来还是存在问题


作者: rowan    时间: 2008-12-17 09:56     标题: sFlag没有定义,只有声明。

sFlag没有定义,只有声明。

光有extern char sFlag;这句是不会为变量sFlag分配内存的。

需要在Events.c中加入char sFlag;


作者: rowan    时间: 2008-12-17 09:58

需要在Events.c中的函数体外加入char sFlag;


作者: fjczd    时间: 2008-12-17 11:34

QUOTE:
以下是引用rowan在2008-12-17 9:56:00的发言:

sFlag没有定义,只有声明。

光有extern char sFlag;这句是不会为变量sFlag分配内存的。

需要在Events.c中加入char sFlag;

应该是在Events.c中用 extern char sFlag吧

我现在是这么用的:

在Events.c中加入extern char 在eeprom中用sFlag,char sFlag;

调试成功,运行也正确


作者: fjczd    时间: 2008-12-17 11:34

时不时在.h文件中声明一下也可以啊
作者: fayefayehoo    时间: 2008-12-18 16:14

QUOTE:
以下是引用fjczd在2008-12-17 11:34:00的发言:
QUOTE:
以下是引用rowan在2008-12-17 9:56:00的发言:

sFlag没有定义,只有声明。

光有extern char sFlag;这句是不会为变量sFlag分配内存的。

需要在Events.c中加入char sFlag;

应该是在Events.c中用 extern char sFlag吧

我现在是这么用的:

在Events.c中加入extern char 在eeprom中用sFlag,char sFlag;

调试成功,运行也正确

调试是成功了,但是理解有错。11楼正解


作者: fjczd    时间: 2008-12-19 15:20

我现在是这么用的:

在Events.c中加入extern char 在eeprom中用sFlag,char sFlag;

是在调用的地方加extern还是在被调用的地方加extern呢?

有点迷糊了


作者: haha2000    时间: 2009-1-10 21:15

定义全局变量sFlag时不用加extern,在引用到该变量的文件中要用extern声明是外部定义过的,这样就行了!


作者: achao86926    时间: 2009-2-28 16:33

你好,我刚才把你的程序运行了一下,当运行你的原来的程序时出现了2个错误,后来我在Events.c种把它声明了一下就可以了,char sFlag;因为这是两个c文件,在一个c里用到的变量你必须在此文件种进行声明,如果另一个c要调用它,在主调用的函数中用EXTERN声明,表示我用的这个变量在外部文件种定义;






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0