我正在尝试使用全局变量来保存我在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更改为返回字符串的函数来绕过此问题,但我仍然想知道错误在哪里。
答案 0 :(得分:3)
您必须在头文件中将其声明为
extern char error [];
并在您的代码文件(.c文件)中声明它
字符错误[1024];
你要分配两次
答案 1 :(得分:-1)
为什么不使用这样的函数:
在.h:
char* GetErr();
和.cpp:
char* GetErr() { return error; }
尽量避免全局变量。在文件范围内它非常安全,但是如果你尝试通过许多文件使用它会导致很大的错误。