在没有全局变量的解耦 functions\methods 之间共享数据

Sharing data between de-coupled functions\methods without globals

基本上我需要的是两个或多个驻留在不同源文件中并且无法相互了解的函数来共享一些数据。 Globals 将是一个即时的解决方案,但他们普遍不受欢迎。难道在这种情况下它们几乎是不可避免的?

以下是我需要使用全局变量执行的操作的简单说明:

file1.c

int foo;

void change_foo()
{
  // Does some calculation to determine the new value of foo
  foo = ...
}

file2.c

extern int foo;

void use_foo()
{
  // Does something with the value of foo
  // Is not aware of change_foo()'s existence so it can't call or be called from it
}

1) 如何消除此处对全局变量的需求?在任一函数内使 int foo 静态将立即耦合两个函数。在 main() 中定义变量然后从 main() 中调用这两个函数对我来说不是一个选项。

2) 像C++这样的OO语言有没有更优雅的解决方案?假设来自两个不同命名空间的两个方法需要共享数据。

3) 我发现这个问题经常发生。一个值得注意的例子是需要在两个独立的 android 活动之间共享资源或一些其他实体(不能以有意义的方式序列化)。有没有办法绕过使用全局变量(本例中 class 和 public 静态字段)或像单例这样的设计模式?

一种可能性(我不推荐这样做)是映射一些内存,并且两个函数都使用该映射内存。当数据不能作为函数调用中的参数传递时,extern 语句非常适合在文件之间访问数据。警告:应尽可能避免全局变量,因为它们是维护的噩梦,并且在被不同的执行线程同时访问时需要互斥锁(或类似的)。

在 C++ 中,变量可以与 getter 和 putter 访问方法一起放置在单例中 class。然后每个文件引用单例 class.

在 C 中,数据可以 'file static' 到第三个文件,其中该文件包含 get/put 变量的函数。 (我就是这样做的)然后每个想要访问变量的函数都可以调用第三个文件中的适当函数。