2017-02-18 159 views
1

我知道有很多问题已经被问到这个具体的事情,但没有人帮助过我。c文件之间共享变量

所以我有一个kernel.h文件和一个kernel.c文件。在kernel.c中,我创建了3个双链表,我想在位于不同c文件中的main中使用它。我想要做的是我想用dlist.h中的另一个dlist.c文件使用我的Insert函数。

现在我在我的kernel.h文件中声明3个列表为extern,并将它们都包含在kernel.c和main.c中。在main.c中,我包含了dlist.h和列表中的所有函数,而在我的main中,我不能使用插入函数和我的列表中的一个,它只是说没有定义它。

+0

在C中没有标准的方法来执行此操作。某些选项(如设置和使用共享内存)取决于系统。根据需求,您可能希望使用对象请求代理,但通常依赖于第三方库。 – Peter

+1

你可以在kernel.c中使用一个函数,并将指针传递给你的变量。在这个函数中分配指针值,理论上你可以在任何地方使用这些变量。但是,如果你有你的变量结构并正确命名,在头中使用extern命令是不错的主意。 – tilz0R

+0

这些列表被声明为struct list * Readylist,所以我必须为Readylist创建一个指针,然后我猜? –

回答

1

一个好的做法是,当你需要一些变量从另一个模块(在你的情况下,其他文件),使用它你调用一个函数:

kernel.c

//Since you have pointers, you have to use double pointers to change pointer where it points to (maybe sounds confusing) 
void getLists(struct list** l1, struct list** l2) { 
    *l1 = Readylist1; 
    *l2 = Readylist2; 
} 

main.c中使用

//Declare pointers 
struct list* l1, *l2; 
//Get pointer values from kernel.c 
getLists(&l1, &l2); 

//Use your list here..