删除c+中的全局变量+;程序 我有一个C++程序,它有太多的函数和全局变量。现在,我想删除这些全局变量,我只想使用局部变量,而不是全局变量。有谁能建议我最好的方法吗。 谢谢 其在C++中的4000行程序。在这些不同的类中有10个类和60个函数,30个全局变量。全局变量在不同类的函数之间使用。
我建议一种解决方案,例如从全局范围中删除它们的声明,并将它们放在函数中 例:删除c+中的全局变量+;程序 我有一个C++程序,它有太多的函数和全局变量。现在,我想删除这些全局变量,我只想使用局部变量,而不是全局变量。有谁能建议我最好的方法吗。 谢谢 其在C++中的4000行程序。在这些不同的类中有10个类和60个函数,30个全局变量。全局变量在不同类的函数之间使用。,c++,data-structures,C++,Data Structures,我建议一种解决方案,例如从全局范围中删除它们的声明,并将它们放在函数中 例: int hello; // global // remove it 现在,将其放入函数中: void func() { int hello; // local //... 我们有两个案例: 如果其他函数需要知道hello的值,则将该hello作为参数: 如果全局变量仅由单个函数使用,则可以使用静态局部变量 我通常首先将全局变量放在一个名称空间中 namespace global { int var;
int hello; // global
// remove it
现在,将其放入函数中:
void func()
{
int hello; // local
//...
我们有两个案例:
如果其他函数需要知道hello
的值,则将该hello
作为参数:
如果全局变量仅由单个函数使用,则可以使用静态
局部变量
我通常首先将全局变量放在一个名称空间中
namespace global
{
int var;
...
}
这将导致您在使用“var”的任何位置都会出现错误,然后我将逐个替换对名称空间变量的引用。一旦所有全局变量引用都在名称空间中,就更容易看到哪些变量是局部变量,哪些是全局变量
if ( global::var == 1 ) ...
现在,通过搜索global::var
您可以得到一个使用变量的列表,然后您需要逐案查看一个变量是否在多个模块中使用,在这些情况下,您可能需要将其作为函数参数传入,在其他情况下,请声明它是局部变量
这是一个很麻烦的方法,但是消除全局变量总是值得的。我建议使用一个类。它们非常适合将变量和函数隐藏到一个组中并进行分类。以下是基本结构:
class example
{
public:
example(); //basic constructor
int function1(); //example function
int x; // a variable accesible globally
private:
int y; // a variable only accesible by functions of the class
};
调用每个函数很容易,但我不想解释,因为我不想开始一个文本墙。您可以转到此链接以了解更多信息:您可以将这些变量放入aclass,然后首先创建指向该类对象的指针。将使用这些变量,然后将此指针传递给每个方法。需要这些变量时,不要忘了删除不使用的对象。它有多大?你能把它扔掉并重写吗?我想你可以把你的代码发布到代码审查StackExchange网站上征求建议。注意静态!根据编译器设置,每个线程可能会获得不同的副本。此外,即使它们使用相同的存储,也要注意并发问题。这不包括不从func()中调用func2的情况。在这种情况下,两个函数都需要
hello
作为参数。此外,您还假设func2不需要更改其参数,而这并不总是预期的……在这种情况下,hello
将在main()
中声明并传递给这两个函数。由于func2
的操作总是需要hello
,因此它实际上根本不需要更改其参数。我在看到前半部分时投了反对票,但在阅读第二部分时将其删除。有趣的思考过程。当命名空间可以完成任务时,为什么要使用类?C++不是java,不是所有的东西都必须在一个类中。全局变量在不同类的函数之间使用,那么我如何在那里使用类呢?
class example
{
public:
example(); //basic constructor
int function1(); //example function
int x; // a variable accesible globally
private:
int y; // a variable only accesible by functions of the class
};