打印
[应用相关]

c语言外部变量调用问题请教

[复制链接]
1173|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangfeng33|  楼主 | 2014-7-31 19:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在一个文件中定义一个全局变量,在另一个文件中想要调用这个变量,在其前面加extern就可以了。可是今天看到这样的代码,一直弄不明白,希望大家帮忙解答:

在GlobalVariables.h文件中定义如下:

#ifndef  GlobalVariables__H__
#define  GlobalVariables__H__

typedef    unsigned  short     INT16U;   
typedef struct
{
INT16U PeriodSum;

INT16U Period_H_1;
INT16U Period_L_1;
INT16U Frequency_1;

INT16U Period_H_2;
INT16U Period_L_2;
INT16U Frequency_2;


} MusicSettingStruct;

extern  MusicSettingStruct *Music;

#endif

然后在另一个文件funvtion.c中加入头文件#include "GlobalVariables.h",就这样Music竟然可以直接使用了。

GlobalVariables.h中是告诉编译器说它是外部已经定义的变量,使用了外部调用,可是Music根本就没有定义啊。我编译后发现居然可以编译通过。后来我自己重新建了一个工程,发现不可以,可是它的却可以通过,有人知道原因吗??

沙发
msblast| | 2014-7-31 22:29 | 只看该作者
如果在工程代码里搜索不到Music的定义,那么应该是定义在库文件里了。

使用特权

评论回复
板凳
电子无聊大神| | 2014-7-31 22:58 | 只看该作者
这个编译是可以通过的,extern只是告诉编译器,这个变量不在这里,在其他地方,你不用管,于是编译器就让编译通过了。
。。。不知道我有没有记错

使用特权

评论回复
地板
ticomi| | 2014-8-1 08:48 | 只看该作者
变量肯定是先定义然后才能使用的,这一点不用怀疑,你说的情况是你没有找到这个变量的定义处,不代表这个变量没有定义!

使用特权

评论回复
5
song19881218| | 2014-8-1 09:19 | 只看该作者
只要变量能用那肯定是定义了,extern只是声明,声明并不分配内存

使用特权

评论回复
6
21ID| | 2014-8-1 15:01 | 只看该作者
就像你在.H中写个函数声明,也不会报错

使用特权

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

本版积分规则

506

主题

2446

帖子

8

粉丝