在两个文件之间共享全局结构(在C中)
我有两个文件,main.c和hash.c 在hash.c中,我只有一个名为在两个文件之间共享全局结构(在C中),c,file,structure,share,global,C,File,Structure,Share,Global,我有两个文件,main.c和hash.c 在hash.c中,我只有一个名为hashtable的空哈希表和一些函数(不是main) 在main.c中,我有main()函数和#include“hash.h” 我的问题是,如果在main.c中,我从hash.c调用一个函数,比如:hash\u add(“草莓”,3),它在hash.c的hash表中添加一个键及其元素(称为hashtable) 那么如果我在main.c中做了extern hash*hashtable,我的3个草莓会在hashtable中吗
hashtable
的空哈希表和一些函数(不是main)
在main.c中,我有main()函数和#include“hash.h”
我的问题是,如果在main.c中,我从hash.c调用一个函数,比如:hash\u add(“草莓”,3)
,它在hash.c的hash表中添加一个键及其元素(称为hashtable
)
那么如果我在main.c中做了extern hash*hashtable
,我的3个草莓会在hashtable中吗?或者我的哈希表是空的
(我的想法是,当我调用hash_add(“草莓”,3)时,只要我在函数范围内,我的3个草莓就在哈希表中)
谢谢在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);
}
如果您有
hash*hastable
在hash.c中,您必须编写extern hash*哈希表代码>在您希望使用变量的其他每个文件中。