Глобальная переменная в другой библиотеке, C - PullRequest
3 голосов
/ 10 января 2010

Я пытаюсь использовать глобальную переменную для хранения моего сообщения об ошибке в C.

Одна библиотека под названием Utils имеет:

#ifndef private_error_h
#define private_error_h

extern char error[1024];

__declspec(dllexport) void FillError(char* newError);
#define GetErr() error

#endif

Файл error.c:

#include "private_error.h"

char error[1024];
void FillError(char* newError) {
  // ...
}

Затем я пытаюсь использовать его в программе:

#include "private_error.h"

int main() {
  FillError("General error");
  printf("%s\n", GetErr());
  return 0;
} 

Создает две переменные с разными адресами. Как я могу заставить программу использовать переменную из библиотеки Utils?

Мне удалось обойти эту проблему, изменив GetErr на функцию, возвращающую строку, но мне все еще интересно, где ошибка здесь.

Ответы [ 2 ]

3 голосов
/ 10 января 2010

Вы должны объявить его в заголовочном файле как

ошибка внешнего символа [];

и в вашем кодовом файле (.c file) объявите его

ошибка символа [1024];

Вы выделяете его дважды

0 голосов
/ 10 января 2010

Почему бы не использовать такую ​​функцию:

в .ч:

char* GetErr();

и в .cpp:

char* GetErr() { return error; }

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

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