c++ - 在没有全局变量的解耦函数\方法之间共享数据

标签 c++ c global-variables

基本上,我需要的是两个或多个驻留在不同源文件中且彼此无法共享某些数据的函数。 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 事件之间共享资源或一些其他实体(不能以有意义的方式序列化)。有没有办法绕过使用全局变量(在本例中是一个具有公共(public)静态字段的类)或像单例这样的设计模式?

最佳答案

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

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

在 C 中,数据可以是“文件静态”到第三个文件,其中该文件包含获取/放置变量的函数。 (我就是这样做的)然后每个想要访问变量的函数都可以调用第三个文件中的适当函数。

关于c++ - 在没有全局变量的解耦函数\方法之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29319073/

相关文章:

c - 在C中初始化一个字符串

c - printf 函数中表达式的求值

javascript - 具有 ID 的 DOM 树元素是否成为全局属性?

c++ - 错误 MSB6006 : "link.exe" exited with code 1 When run SDV ( Static Driver Verifier) , Visual Studio 2019,SDK 10 build 19041,windows 10 build 19041

c++ - 为我的程序分配更多处理器周期

c - 简单标量缓存 LRU 实现

python - 如何避免使用 __init__ 方法的全局变量和静态方法?

c - 处理大量变量

c++ - NPAPI mac 插件与浏览器共享命令

c++ - 如何在C控制台中打印wchar_t *?