【发布时间】:2014-02-09 16:12:25
【问题描述】:
我目前正在编写一个 C LIBRABY,我需要在其中使用静态 void*。
在我的第一个版本中,我将所有需要访问我的 void* 的函数放在声明它的同一个 C 文件中,如下所示:
main.c
int main()
{
function_using_list();
}
foo.c:
void *list=NULL;
void *function_using_list()
{
//stuff with list
}
在我的第二个版本中,我做了一个小 get/set 函数,这样我就可以从代码中的任何地方通过它访问我的列表:
foo.c
void *getset_list(void nlist, int action)
{
static void *list = NULL;
if (action == 1)
return (list)
else
list = nlist;
}
这两种不同设计的优缺点是什么?第二个是线程安全的吗?
PS:我刚刚意识到我在我的问题中忘记了一些东西:此代码旨在用作库。
【问题讨论】:
-
不要使用全局变量。总是以泪水告终。因可爱而获得 +1
-
@EdHeal:我认为这里介绍的两个选项的安全性没有任何实质性差异......
-
我唯一能看到的是,在
getset_list版本中,没有人可以获取list变量的地址并在你不期望它的时候乱用它。他们至少要经过getset_list。 -
@OliCharlesworth - 考虑另一个库是否有全局变量
list? -
第一个参数 'nlist' 应该是 void* 类型。