c++ - EXTERN 或 STATIC 用于维护许多变量

标签 c++ memory-management scope

在阅读了 2011 年 7 月 28 日 11:56 的“ruhalde”评论后, extern keyword usage

我想要一些关于如何使用 EXTERN 与 STATIC 组织许多变量的建议。

在那篇文章中, 1) definer 和 initializer 在一个 CPP 文件中。 2) 在单独的 .h 文件中使用“extern”声明,但没有定义。

假设我在多个 CPP 文件中有 100 个全局变量(但以某种方式相关),将它们全部分组到一个 .h 文件中是共享它们的好方法。

但这需要开发人员在多个 CPP 和头文件中维护(这些相关的)变量。我见过其他开发人员使用“静态”将所有变量分组到一个 .h 文件中。

例如我的标题.h

static int var1 = 1;
static int var2 = 2;
...

这样更容易维护。但据我了解,这些变量不再是“全局的”。 “static”关键字将范围缩小到包含此头文件的 cpp 文件。

foo1.cpp

#include "myheader.h"
void foo1()
{
  var1 +=1;
  var2 +=2;
  printf(....., var1, var2);
}

foo2.cpp

#include "myheader.h"
void foo2()
{
  var1 +=100;
  var2 +=200;
  printf(....., var1, var2);
}

foo1 中的 var1、var2 与 foo2 中的 var1、var2 是不同的变量。 更严重的是,myheader.h 中的每个变量都会为包含它的每个函数重新创建。

问题:(假设我正确使用“extern”和“static”)

不使用“extern”来创建真正的全局变量,使用“static”来简化代码维护是否是一种可接受的替代方法?

最佳答案

Say I have 100 global variables (but related somehow) in MULTIPLE CPP files,

是一个非常糟糕的设计!不要这样做!

By not using "extern" to create truly global variables, is using "static" for easier code maintenance an acceptable alternative?

这简直是完全不同的东西!正如您所写的,static 每次在 cpp 文件中使用它时都会为您提供一个新的实例。静态没有全局!

我建议你

  1. 不要使用全局变量
  2. 如果您使用全局变量,请将它们放在一个完整的类中以使其更易于处理
  3. 请记住,变量/类实例的初始化将取决于链接顺序。永远不要依赖那个命令!
  4. 查看单例模式

关于c++ - EXTERN 或 STATIC 用于维护许多变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25029089/

相关文章:

c++ - 无法将指向 const 数据的指针作为函数模板参数传递

c++ - 无法将完美转发添加到包装函数

linux - 在linux中预留物理地址空间

c++ - 使用 Visual 调试器释放内存非常慢

c++ - C++ 中的模板化类型数组

c++ - 具有值语义的运行时多态类

c - 在进程的内核空间中 kmalloc 优先于数组

javascript - CommonJS 函数声明范围的良好实践

c++ - 在对象超出范围之前调用的析构函数

javascript - Node REPL : Why does this variable assignment fail?