我有两个文件:
#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 ..
}
Run Code Online (Sandbox Code Playgroud)
#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 ..
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当我尝试编译它时,编译器抱怨没有buff定义,但是当我尝试定义它时,链接器会抱怨两个buff变量.第二十二条军规.为此,我问了两个问题:
如何解决这个问题;
如果可以使用相同的变量从而节省内存,因为只需要分配一个变量(使用内存受限的微控制器).
你需要在hud.c的顶部以及你使用它们的任何其他.c文件:
extern struct TextSize tsize;
extern char buff[50];
Run Code Online (Sandbox Code Playgroud)
该extern关键字告诉编译器"实际"变量已经存在,在其他一些单元(文件)中,链接器最终将为您解决所有问题.
如果你在一个项目中大规模地这样做,考虑如何在一个地方封装全局变量,并创建一个共享的.h文件,将这些东西声明为"extern",用于你使用它们的所有地方.
| 归档时间: |
|
| 查看次数: |
1203 次 |
| 最近记录: |