你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 4369|回复: 15

关于c语言外部变量调用问题

[复制链接]

8

主题

31

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2014-3-27 13:58:10 | 显示全部楼层 |阅读模式
本来,在一个文件中定义一个全局变量,在另一个文件中想要调用这个变量,在其前面加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根本就没有定义啊。我编译后发现居然可以编译通过。后来我自己重新建了一个工程,发现不可以,可是它的却可以通过,有人知道原因吗??
回复

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2014-3-27 15:08:11 | 显示全部楼层

RE:关于c语言外部变量调用问题

这个只是声明,你看一下,是不是别的地方定义了。
回复 支持 反对

使用道具 举报

8

主题

31

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2014-3-27 17:53:31 | 显示全部楼层

回复:关于c语言外部变量调用问题

回复第 2 楼 于2014-03-27 15:08:11发表:
这个只是声明,你看一下,是不是别的地方定义了。
 

已经查看了很多遍了,虽然有20多个文件,但是用过很多编译查询功能全部搜索出来,就是找不到它的定义,而且不止是一个,起码有20多个这样的变量都是没有找到它是从哪里调用过来 的
回复 支持 反对

使用道具 举报

4

主题

224

回帖

0

蝴蝶豆

初级会员

最后登录
2020-7-4
发表于 2014-3-27 21:50:36 | 显示全部楼层

RE:关于c语言外部变量调用问题

你看看工程中有没有包含库文件, 譬如.o文件,这些文件是c文件编译的结果,如果包含了.o表示对应的.o文件中已经定义了这个全局变量。
很多公司提供一些标准功能函数,但是为了保护其产权,只提供.h 和对应的.o 库文件。
肯定是这种问题, st官方历程就有这种情况
回复 支持 反对

使用道具 举报

5

主题

212

回帖

0

蝴蝶豆

金牌会员

最后登录
1970-1-1
发表于 2014-3-28 10:57:38 | 显示全部楼层

RE:关于c语言外部变量调用问题

肯定是有定义,再仔细查找一下吧,或许就像楼上说的那样
回复 支持 反对

使用道具 举报

16

主题

295

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-10-27
发表于 2014-3-28 12:56:42 | 显示全部楼层

RE:关于c语言外部变量调用问题

这只是个定义,楼主还是程序中有定义,要不就是没有使用,可能编译器就是报出个警告,被你忽略了。还有就是代码被编译器优化掉了,根本没使用这个变量
回复 支持 反对

使用道具 举报

1

主题

51

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2014-3-30 18:06:39 | 显示全部楼层

RE:关于c语言外部变量调用问题

在其他文件肯定有定义的,建议楼主再重新找找。或者提供代码,我帮你找
回复 支持 反对

使用道具 举报

2

主题

295

回帖

0

蝴蝶豆

初级会员

最后登录
2018-4-6
发表于 2014-3-31 15:17:21 | 显示全部楼层

RE:关于c语言外部变量调用问题

Music 中也有头文件包含了#include "GlobalVariables.h"吧
回复 支持 反对

使用道具 举报

8

主题

31

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2014-3-31 16:26:19 | 显示全部楼层

回复:关于c语言外部变量调用问题

回复第 6 楼 于2014-03-28 12:56:42发表:
这只是个定义,楼主还是程序中有定义,要不就是没有使用,可能编译器就是报出个警告,被你忽略了。还有就是代码被编译器优化掉了,根本没使用这个变量 

怎么可能没有用这些变量,有20多个呢。真的所有文件都找过n遍,不止我一个人找,我们四个人一起都找不到。
回复 支持 反对

使用道具 举报

8

主题

31

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2014-3-31 16:26:35 | 显示全部楼层

回复:关于c语言外部变量调用问题

回复第 4 楼 于2014-03-27 21:50:36发表:
你看看工程中有没有包含库文件, 譬如.o文件,这些文件是c文件编译的结果,如果包含了.o表示对应的.o文件中已经定义了这个全局变量。
很多公司提供一些标准功能函数,但是为了保护其产权,只提供.h 和对应的.o 库文件。
肯定是这种问题, st官方历程就有这种情况 

那你又怎么知道.o文件里已经定义了,.o文件可是打不开的
回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版