我在 C++ 中有一个大型程序,它有太多的函数和全局变量。现在,我想删除那些全局变量,我只想使用局部变量而不是全局变量。任何人都可以建议我最好的方法来做到这一点。谢谢!
它用 C++ 编写了大约 4000 行的程序。这些不同的类中有10个类和60个函数,30个全局变量。全局变量已在不同类的函数之间使用。
我在 C++ 中有一个大型程序,它有太多的函数和全局变量。现在,我想删除那些全局变量,我只想使用局部变量而不是全局变量。任何人都可以建议我最好的方法来做到这一点。谢谢!
它用 C++ 编写了大约 4000 行的程序。这些不同的类中有10个类和60个函数,30个全局变量。全局变量已在不同类的函数之间使用。
我通常首先将全局变量放在命名空间中
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
};
调用每个函数很容易,但我不会解释,因为我不想启动文本墙。您可以访问此链接了解更多信息:http ://www.cplusplus.com/doc/tutorial/classes/
我建议一个解决方案,例如从全局范围中删除它们的声明并将它们放在赞赏的函数中。
示例:
int hello; // global
// remove it
现在,将其放入函数中:
void func()
{
int hello; // local
//...
我们有两种情况:
如果其他函数需要知道 的值
hello
,让它hello
作为参数:
void func2(const int &helloVar)
{
// ...
如果全局变量仅由单个函数使用,则可以改用
static
局部变量。
您可以将这些变量放在一个类中,然后在第一个位置创建指向该类对象的指针将使用这些变量,然后将此指针传递给每个需要这些变量的方法,不要忘记在不使用时删除该对象。