在C语言中跨文件共享变量
我有两个文件: hudwidts.c 我遇到的问题是,当我试图编译它时,编译器抱怨没有定义在C语言中跨文件共享变量,c,C,我有两个文件: hudwidts.c 我遇到的问题是,当我试图编译它时,编译器抱怨没有定义buff,但当我试图定义它时,链接器抱怨两个buff变量。第二十二条军规。为此,我提出两个问题: 如何解决这个问题,以及 如果由于只需要分配一个变量(使用内存受限的微控制器),因此可以使用相同的变量从而节省内存 您需要在hud.c顶部使用此文件,以及从以下位置使用它们的任何其他.c文件: extern struct TextSize tsize; extern char buff[50]; extern关
buff
,但当我试图定义它时,链接器抱怨两个buff
变量。第二十二条军规。为此,我提出两个问题:
您需要在hud.c顶部使用此文件,以及从以下位置使用它们的任何其他.c文件:
extern struct TextSize tsize;
extern char buff[50];
extern
关键字告诉编译器“实际”变量已经存在于其他单元(文件)中,链接器最终会为您解决所有问题
如果你在一个项目中大规模地做这件事,考虑你如何将全局包封装在一个地方,并创建一个共享的.h文件,声明这些东西对于你使用它们的所有地方都是“Extn”。
< P>使用“ExtBuchBuff(50);”在你没有初始化Buff并想使用它的文件中。这说明声明是在其他文件中完成的,您正在该文件中使用它。其他c文件是什么意思?还有很多其他的。那么,我应该把它放在“main.c”或“hud.c”或“hudwidts.c”或其他什么地方吗?无论你在哪里使用这些变量。在上面的示例中,它是“hud.c”。但是,任何访问这些全局文件的文件,除了您在其中定义它们的实际文件之外,都需要将它们声明为“extern”。@Thomas如果所有这些.c
文件都包含一个公共头,您可以将其放在那里。如果hudwidts.c
也包含该文件,则可以将变量外部化,然后在同一个文件中声明它file@ThomasO:任何使用它的文件。通常,您会将extern声明放在所有这些文件都包含的头文件中。谢谢大家。回答正确;它起作用了。当它允许我(6分钟)时,我会将其标记为已接受的答案
#include "hudwidgets.h"
#include "hud.h"
#include "osd.h"
#include "osdadd.h"
.. some code ..
void hud_rc_plane_single_frame()
{
fill_mem(0x0000);
if((frame / 50) % 2 == 0)
{
get_next_warning(buff);
}
.. some more code ..
}
extern struct TextSize tsize;
extern char buff[50];