我有两个文件:
#include "osd.h"
#include "osdadd.h"
#include <stdio.h>
struct TextSize tsize;
char buff[50];
void hud_draw_lin_compass(int cx, int cy, int tick_maj, int tick_min, int range, int heading)
{
.. important code that uses buff ..
}
#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 ..
}
我遇到的问题是,当我尝试编译它时,编译器抱怨没有定义buff
,但是当我尝试定义它时,链接器会抱怨两个buff
变量。第二十二条军规。为此,我问了两个问题:
如何解决这个问题;
如果可以使用相同的变量,从而节省内存,因为只需要分配一个变量(使用内存受限的微控制器。)
答案 0 :(得分:9)
你需要在hud.c的顶部以及你使用它们的任何其他.c文件:
extern struct TextSize tsize;
extern char buff[50];
extern
关键字告诉编译器“实际”变量已经存在,在其他一些单元(文件)中,链接器最终将为您解决所有问题。
如果你在一个项目中大规模地这样做,考虑如何在一个地方封装全局变量,并创建一个共享的.h文件,为你使用它们的所有地方声明这些东西为“extern”从
答案 1 :(得分:2)
使用“extern char buff [50];”在您尚未初始化buff并希望使用它的文件中。这告诉声明是在其他文件中完成的,并且您正在此文件中使用它。