2017-08-24 49 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); 
}