Совместное использование переменных в файлах в C - PullRequest
3 голосов
/ 14 августа 2010

У меня есть два файла:

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 переменные.Словить 22.С этой целью я задаю два вопроса:

  1. как это исправить, и;

  2. , если возможно использовать одну и ту же переменную, тем самым экономя память, поскольку необходимо выделить только одну переменную (работа с микроконтроллером с ограничением памяти.)

Ответы [ 2 ]

9 голосов
/ 14 августа 2010

Вам нужно это в начале hud.c и любого другого файла .c, из которого вы их используете:

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

Ключевое слово extern сообщает компилятору о том, что "фактические" переменные уже существуют, в каком-то другом модуле (файле), и компоновщик исправит все это за вас.

Если вы делаете это в больших масштабах в проекте, подумайте, как вы можете инкапсулировать глобальные переменные в одном месте, и создайте общий файл .h, который объявляет эти вещи как "внешние" для всех мест, где вы их используете с.

2 голосов
/ 14 августа 2010

используйте "extern char buff [50];"в файлах, где вы не инициализировали бафф и хотите его использовать.Это говорит о том, что объявление сделано в других файлах, и вы используете его в этом файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...