2017-08-24 66 views
2

我有兩個文件,main.c中和hash.c分享兩個文件(在C)

在hash.c,我只有這被稱爲hashtable一個空哈希表和某些功能之間的全局結構(不是主要的) 和main.c中,我有main()函數和#include "hash.h"

我的問題是,如果在main.c中,我調用一個函數從hash.c這樣的:hash_add("strawberry", 3),這增加在hash.c(它被稱爲hashtable),

然後如果我在main.c中做了extern hash * hashtable將我的3個草莓放在散列表中?或者我的散列表是空的?

(我覺得是當我打電話hash_add("strawberry", 3),我的3個草莓是哈希表,只要我是函數的範圍內)

謝謝

+0

如果你有'哈希* hastable;'在hash.c,你必須寫'EXTERN哈希* hashtable;'在你想使用變量的其他文件中。 – mch

回答

2

有兩種方式來做到這一點C.聽起來你正在使用全局變量,所以我會先描述它。更好的方法是使用局部變量,我會告訴你,第二:

全局變量你會做這樣的事情:

// hash.h 
void hash_add(const char* key, int value); 
extern hash h; 

// hash.c 
hash h; 
void hash_add(const char* key, int value) { ... } 

// main.c 
#include "hash.h" 
int main() 
{ 
    hash_add("strawberry", 3); 
    // h will now have three strawberries 
} 

最好不要使用全局變量,因爲你減少名稱衝突,並且一次可以有多個散列表。在這種情況下,你通常持有一個指向哈希,然後將其傳遞到散列函數:

// hash.h 
void hash_add(hash* h, const char* key, int value); 
hash* hash_create(); 
void hash_destroy(hash* h); 

// main.c 
#include "hash.h" 
int main() 
{ 
    hash* h = hash_create(); 

    hash_add(h, "strawberry", 3); 
    // h will now have three strawberries 

    hash_destroy(h); 
}