代码之家  ›  专栏  ›  技术社区  ›  Thomas O

在C语言中跨文件共享变量

c
  •  3
  • Thomas O  · 技术社区  · 14 年前

    哈德逊.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 ..
    }
    

    #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 定义,但当我试图定义它时,链接器抱怨有两个 变量。第二十二条军规。为此,我要问两个问题:

    1. 如何解决这个问题,以及;

    2 回复  |  直到 14 年前
        1
  •  9
  •   Ben Zotto sberry    14 年前

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

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

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

    如果您在一个项目中大规模地这样做,请考虑如何将globals封装在一个地方,并创建一个共享的.h文件,该文件将这些东西声明为“extern”,用于您使用它们的所有地方。

        2
  •  2
  •   chaitanyavarma    14 年前