【发布时间】:2021-09-10 05:38:17
【问题描述】:
我需要在主函数中设置一个变量,并从同一个文件中的不同函数访问它。我不能将它传递给函数,因为这意味着更改整个代码结构,这不是一个选项。为了避免声明全局变量,我创建了一个命名空间,我想检查这是否是一种好的编程习惯,或者是否有更简洁的方法来做到这一点。 这是代码:
namespace mylocalnamespace{
int myglobalvar;
}
static void myFunc()
{
..... some code
operationX(mylocalnamespace::myglobalvar);
..... some code
}
int main(int argc, char **argv)
{
..... some code
mylocalnamespace::myglobalvar = atoi(argv[0]);
..... some code
}
【问题讨论】:
-
如果您不想传递参数,那么唯一的选择是将其放入两个函数都可以访问的范围内。所以命名空间范围。单例也可以是一种安全的方法。
-
将全局命名空间中的全局变量放入
mylocalnamespace命名空间中仍然是一个全局变量。但现在它是命名空间中的全局变量。 -
如果您的代码结构错误,您将花费大量时间来解决错误。最好现在修复它。
-
看起来 Lily 正在与遗留代码作斗争。问题是太多的信息已经从问题中剥离出来。 @Lily 请提供更多详细信息!您需要维护什么样的兼容性:二进制/源代码?是否涉及线程?谁访问这个全局状态:它是从调用到调用还是其他函数访问该状态?您是否在没有参数的情况下实际运行?如果不提供有关参数的信息。确保每个人都清楚什么是固定的什么被剥离了什么是明确的。
标签: c++ scope namespaces logic global-variables