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

查看: 4404|回复: 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 &quot;GlobalVariables.h&quot;吧
回复 支持 反对

使用道具 举报

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版