如何处理两个项目之间常见的全局变量?

时间:2011-03-15 07:26:15

标签: c include global-variables

我有两个用C语言编写的项目:客户端和服务器端,两者都包含许多常见的全局变量。我想编写一个类(使用接口Transaction的clientbot和serverbot),它将调用每个项目的main函数。

我已将所有常见的全局变量移动到头文件中,并将其包含在两个项目中。但是在构建它时会引发我的链接错误。

  

错误3错误LNK2005:“int g_nBytestoSend”(?g_nBytestoSend @@ 3HA)已在transimpl.obj agentBot.obj中定义

有人可以建议我应该做什么吗?

2 个答案:

答案 0 :(得分:2)

您不应将实际变量放在标题中,只应将extern声明。将实际变量放在单独的.c.cpp文件中并与之链接。

在标题中(让我们称之为globals.h),您将声明:

extern int g_nBytesToSend;

然后你创建一个新的代码文件来保存实际的变量(比如global.c):

int g_nBytesToSend;

假设您有三个代码文件server.cclient.cbot.c,并且您正在使用gcc。你会建立这样的:

gcc -o server.o -c server.c
gcc -o client.o -c client.c
gcc -o bot.o -c bot.c
gcc -o globals.o -c globals.c
gcc -o mybot server.o client.o bot.o globals.o

(尽量保持全局变量的数量。)

答案 1 :(得分:0)

您是否protect使用ifndef的头文件?