本来,在一个文件中定义一个全局变量,在另一个文件中想要调用这个变量,在其前面加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根本就没有定义啊。我编译后发现居然可以编译通过。后来我自己重新建了一个工程,发现不可以,可是它的却可以通过,有人知道原因吗?? |
RE:关于c语言外部变量调用问题
回复:关于c语言外部变量调用问题
这个只是声明,你看一下,是不是别的地方定义了。
已经查看了很多遍了,虽然有20多个文件,但是用过很多编译查询功能全部搜索出来,就是找不到它的定义,而且不止是一个,起码有20多个这样的变量都是没有找到它是从哪里调用过来 的
RE:关于c语言外部变量调用问题
很多公司提供一些标准功能函数,但是为了保护其产权,只提供.h 和对应的.o 库文件。
肯定是这种问题, st官方历程就有这种情况
RE:关于c语言外部变量调用问题
RE:关于c语言外部变量调用问题
RE:关于c语言外部变量调用问题
RE:关于c语言外部变量调用问题
回复:关于c语言外部变量调用问题
这只是个定义,楼主还是程序中有定义,要不就是没有使用,可能编译器就是报出个警告,被你忽略了。还有就是代码被编译器优化掉了,根本没使用这个变量
怎么可能没有用这些变量,有20多个呢。真的所有文件都找过n遍,不止我一个人找,我们四个人一起都找不到。
回复:关于c语言外部变量调用问题
你看看工程中有没有包含库文件, 譬如.o文件,这些文件是c文件编译的结果,如果包含了.o表示对应的.o文件中已经定义了这个全局变量。
很多公司提供一些标准功能函数,但是为了保护其产权,只提供.h 和对应的.o 库文件。
肯定是这种问题, st官方历程就有这种情况
那你又怎么知道.o文件里已经定义了,.o文件可是打不开的
回复:关于c语言外部变量调用问题
在其他文件肯定有定义的,建议楼主再重新找找。或者提供代码,我帮你找
我们四个人一起找都找不到了,估计真的是没有定义,但是在它这个工程下,我们修改程序,这些变量完全可以使用。只要你自己建立一个新工程,那就不行了。
RE:关于c语言外部变量调用问题
RE:关于c语言外部变量调用问题
一般作者为了保护部分代码,将部分代码生成了.lib文件,这样里面的函数和变量定义是无法通过搜索功能查到的,它只给出一个外部声明。
如果没搜到 Music可能被放到一个不是标准库命名方式的.lib中了,你在工程文件里面看看
回复:关于c语言外部变量调用问题
.o 是编译生成的文件,怎么会包含函数呢。
一般作者为了保护部分代码,将部分代码生成了.lib文件,这样里面的函数和变量定义是无法通过搜索功能查到的,它只给出一个外部声明。
如果没搜到 Music可能被放到一个不是标准库命名方式的.lib中了,你在工程文件里面看看
没有什么.lib文件,我把它所有.c和.h文件全部加到另一个新的工程中,发现也可以通过编译。但是如果你复制它工程里.c和.h的内容加入新工程,却是不行的。
估计没人知道是为啥了
RE:关于c语言外部变量调用问题