替代C中的成员变量

时间:2011-05-20 17:54:25

标签: c member

我有一个包含多个相关功能的文件,需要共享一段数据。虽然我想避免使用全局变量,但我能想到的最佳解决方案是在文件中声明静态,但我想将范围限制在文件中。我认为可以使用static声明来完成。还有其他更好的选择吗?

在面向对象的环境中,他们都将成为一个类的成员。

4 个答案:

答案 0 :(得分:4)

虽然静态可行,但我认为你真正想要的是一个结构。每个函数都将此结构作为参数。如下所示:

typedef struct mystruct_s {
    ...
} mystruct_t;

void myfunc1(mystruct_t *mystruct);
void myfunc2(mystruct_t *mystruct);

这种方法的一个优点是它的线程安全。也就是说,你可以同时运行多个mystruct实例。它也比基本上是一个全局变量更清晰(即使它的范围受限于一个文件)。

答案 1 :(得分:3)

不,声明一个全局静态变量几乎涵盖了你需要做的事情(假设变量需要改变;否则,使用宏)。您可以在全局级别声明一个静态变量,并使其对文件是私有的。

另外,请注意,这完全不是线程安全的。

答案 2 :(得分:2)

static会将范围限制在文件中,但只会有一个。这意味着如果涉及任何状态,您只能拥有该组功能的一个用户。

最好有一个带有生命周期的句柄,但是你可以根据需要使用它。即:

Foo * handle = foo_create();  // Allocates and initializes a structure

foo_operation1(handle);
foo_operation2(handle);

foo_destroy(handle);          // Deallocates the structure

这保证只有知道handle的代码才能做任何改变它的事情。

答案 3 :(得分:1)

static会将范围限制为当前编译(文件)。但这是一个全球宣言。另一种方法是将对象从函数传递给函数作为参数。这很常见。