木头子 发表于 2014-3-27 13:58:10

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

本来,在一个文件中定义一个全局变量,在另一个文件中想要调用这个变量,在其前面加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根本就没有定义啊。我编译后发现居然可以编译通过。后来我自己重新建了一个工程,发现不可以,可是它的却可以通过,有人知道原因吗??

废鱼 发表于 2014-3-27 15:08:11

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

这个只是声明,你看一下,是不是别的地方定义了。

木头子 发表于 2014-3-27 17:53:31

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

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

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

wkuang 发表于 2014-3-27 21:50:36

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

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

dlyt03 发表于 2014-3-28 10:57:38

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

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

我爱下载 发表于 2014-3-28 12:56:42

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

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

灰小子-1888763 发表于 2014-3-30 18:06:39

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

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

有缘于你 发表于 2014-3-31 15:17:21

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

Music 中也有头文件包含了#include "GlobalVariables.h"吧

木头子 发表于 2014-3-31 16:26:19

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

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

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

木头子 发表于 2014-3-31 16:26:35

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

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

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

木头子 发表于 2014-3-31 16:29:22

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

回复第 7 楼 于2014-03-30 18:06:39发表:
在其他文件肯定有定义的,建议楼主再重新找找。或者提供代码,我帮你找 

我们四个人一起找都找不到了,估计真的是没有定义,但是在它这个工程下,我们修改程序,这些变量完全可以使用。只要你自己建立一个新工程,那就不行了。

废鱼 发表于 2014-3-31 17:12:15

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

你用的是不是有.lib文件?

fengye5340 发表于 2014-3-31 21:16:24

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

.o 是编译生成的文件,怎么会包含函数呢。
一般作者为了保护部分代码,将部分代码生成了.lib文件,这样里面的函数和变量定义是无法通过搜索功能查到的,它只给出一个外部声明。

如果没搜到 Music可能被放到一个不是标准库命名方式的.lib中了,你在工程文件里面看看

木头子 发表于 2014-4-1 11:51:21

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

回复第 13 楼 于2014-03-31 21:16:24发表:
.o 是编译生成的文件,怎么会包含函数呢。
一般作者为了保护部分代码,将部分代码生成了.lib文件,这样里面的函数和变量定义是无法通过搜索功能查到的,它只给出一个外部声明。

如果没搜到 Music可能被放到一个不是标准库命名方式的.lib中了,你在工程文件里面看看
 
 
 
 
没有什么.lib文件,我把它所有.c和.h文件全部加到另一个新的工程中,发现也可以通过编译。但是如果你复制它工程里.c和.h的内容加入新工程,却是不行的。
估计没人知道是为啥了

dzc2001 发表于 2014-4-2 16:54:22

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

会不会是人家的lib文件里面定义了,我碰见过的
页: [1]
查看完整版本: 关于c语言外部变量调用问题