在C中跨文件共享变量

时间:2010-08-14 02:24:34

标签: c

我有两个文件:

hudwidgets.c

#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 ..
}

hud.c

#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变量。第二十二条军规。为此,我问了两个问题:

  1. 如何解决这个问题;

  2. 如果可以使用相同的变量,从而节省内存,因为只需要分配一个变量(使用内存受限的微控制器。)

2 个答案:

答案 0 :(得分:9)

你需要在hud.c的顶部以及你使用它们的任何其他.c文件:

extern struct TextSize tsize;
extern char buff[50];

extern关键字告诉编译器“实际”变量已经存在,在其他一些单元(文件)中,链接器最终将为您解决所有问题。

如果你在一个项目中大规模地这样做,考虑如何在一个地方封装全局变量,并创建一个共享的.h文件,为你使用它们的所有地方声明这些东西为“extern”从

答案 1 :(得分:2)

使用“extern char buff [50];”在您尚未初始化buff并希望使用它的文件中。这告诉声明是在其他文件中完成的,并且您正在此文件中使用它。