在2011年7月28日11:56阅读“ruhalde”评论后, extern keyword usage
我想了解如何组织许多变量,使用EXTERN与STATIC。
在那篇文章中, 1)定义器和初始化器位于CPP文件中。 2)使用“extern”声明,但没有定义,在单独的.h文件中。
假设我在MULTIPLE CPP文件中有100个全局变量(但在某种程度上相关),将它们全部归为一个.h文件是分享它们的好方法。
但这需要开发人员在MULTIPLE CPP和头文件中维护(这些相关的)变量。我见过其他开发人员使用“static”将所有变量分组到一个.h文件中。
e.g。 myheader.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);
}
var1,foo1中的var2是var1中的DIFFERENT变量,foo2中是var2。 更严重的是,myheader.h中的每个变量都会为包含它的每个函数重新创建。
问题:(假设我正确使用“extern”和“static”)
通过不使用“extern”来创建真正的全局变量,使用“静态”来更容易地进行代码维护是一种可接受的替代方案吗?
答案 0 :(得分:1)
假设我在MULTIPLE CPP文件中有100个全局变量(但以某种方式相关),
是一个非常糟糕的设计!根本就不要这样做!
通过不使用“extern”来创建真正的全局变量,使用“静态”来更容易地进行代码维护是一种可接受的替代方案吗?
这完全是另一回事!正如您所写,static
每次在cpp文件中使用它时都会为您提供新的实例。静态没有全球性的东西!
我建议你
singleton pattern
答案 1 :(得分:0)
您可以将所有变量放在标题中,将它们声明为extern。现在在cpp中定义它们。 然后,您可以将标题包含在需要这些变量的源文件中。
答案 2 :(得分:0)
我会将static
个变量放在.h
文件中,只有它们是常量。这样,包含.h
文件的每个文件都将获得相同的,未更改的值。
正如您所解释的那样,用户(以及开发人员在调试时)看到变量在不同函数中具有不同的值会非常混乱。
对于不是const
的变量,我建议将它们声明为extern
个变量。它们可以在适当的.cpp
文件中定义。