2017-02-18 172 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..