在C中的函数之间共享数据值

时间:2017-08-01 16:05:42

标签: c

我在dbinfo.h中有一个简单的结构,即

typedef struct {
   int fields;
} dbinfo;

在主程序中我有:

#include <string.h>
 ...
#include "dbinfo.h"
extern dbinfo *tst_info;

void main() {

tst_info = (dbinfo *) calloc(1, sizeof(dbinfo));

dbinfo.fields = 3;

printf("\n number of fields = %d"), getnumflds());
...
}

在另一个文件utilities.c中我有

#include "dbinfo.h"
extern dbinfo *tst_info;

int getnumflds() {

   return tst_info.fields;
}

当我尝试链接时,我在tst_info的utilities.c中得到未定义的符号。 如果我删除extern,那么我没有得到任何未解析的符号,但是字段的值是0。

我在这里做错了什么?

我只是希望能够使用和更改&#39;字段&#39;在其他单独编译的函数中设置为main。

自从我使用C并且无法访问这些神经元以来已经很久了!

2 个答案:

答案 0 :(得分:2)

除一个外,tst_info的所有定义必须为extern 。某个对象文件中变量的extern关键字告诉链接器不要在数据段中为它分配空间,因为变量的存储将在某个其他目标文件中提供。如果所有目标文件都将变量定义为extern,则没有为其提供存储的目标文件。

您可以在此帖中阅读有关此内容的更多信息: https://stackoverflow.com/a/1433387/773113

答案 1 :(得分:1)

您在两个翻译单元中将tst_info声明为externextern关键字意味着它可以在其他地方使用,有些extern al翻译联合。在某个地方,您需要通过 not 实际定义extern关键字,而是设置初始值(可以是callocNULL的结果或其他东西)。

您可能还会发现声明全局dbinfo而不是dbinfo *更容易,具体取决于您的程序的使用情况。您可以从动态运行时分配中移出的数据越多越好。