[应用相关] c语言外部变量调用问题请教

[复制链接]
1687|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 | 显示全部楼层
变量肯定是先定义然后才能使用的,这一点不用怀疑,你说的情况是你没有找到这个变量的定义处,不代表这个变量没有定义!
song19881218 发表于 2014-8-1 09:19 | 显示全部楼层
只要变量能用那肯定是定义了,extern只是声明,声明并不分配内存
21ID 发表于 2014-8-1 15:01 | 显示全部楼层
就像你在.H中写个函数声明,也不会报错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

506

主题

2446

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部