在两个文件之间共享全局结构(在C中)

时间:2017-08-24 12:27:58

标签: c file structure share global

我有两个文件,main.c和hash.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个草莓就在哈希表中)

谢谢

1 个答案:

答案 0 :(得分: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);
}