全局变量在不同的库中,C

时间:2010-01-10 20:04:54

标签: c

我正在尝试使用全局变量来保存我在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 个答案:

答案 0 :(得分:3)

您必须在头文件中将其声明为

extern char error [];

并在您的代码文件(.c文件)中声明它

字符错误[1024];

你要分配两次

答案 1 :(得分:-1)

为什么不使用这样的函数:

在.h:

char* GetErr();

和.cpp:

char* GetErr() { return error; }

尽量避免全局变量。在文件范围内它非常安全,但是如果你尝试通过许多文件使用它会导致很大的错误。