c++ - C++ 中全局变量的替代品

标签 c++ scope namespaces logic global-variables

我需要在主函数中设置一个变量并从同一文件中的不同函数访问它。我无法将它传递给函数,因为这意味着更改整个代码结构,这不是一个选项。为了避免声明一个全局变量,我创建了一个命名空间,我想检查这是否是一个好的编程实践,或者是否有更简洁的方法来做到这一点。
这是代码:

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
}

最佳答案

Alternatives To Global Variables in C++


在示例中,函数参数是避免全局变量的一个很好的替代方法:
static void myFunc(int mylocalvar)
{
    ..... some code
    operationX(mylocalvar);
    ..... some code

}
int main(int argc, char **argv)
{
   ..... some code
   mylocalvar = atoi(argv[0]);
   ..... some code
   myFunc(mylocalvar);
}

I can not pass it to the function


哦,那么你必须使用一个全局变量。
由于您显然在具有内部链接的函数中使用它,因此您也可以通过使用具有内部链接的 global 稍微改进。这样全局不会泄漏到其他翻译单元。一个方便的方法是匿名命名空间:
namespace {
    int myglobalvar;

    void myFunc() {
        // ...

To avoid declaring a global variable I crated a namespace


即使不在全局命名空间中,全局变量仍然是全局变量。

关于c++ - C++ 中全局变量的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68154488/

相关文章:

c++ - 在 C++ 中是否有一种简单的方法来使用乘法累加?

perl - 为什么 AnyEvent 计时器观察器必须在其回调中取消定义才能触发?

javascript - 从全局范围访问定义的 Vue 组件

javascript - 跨浏览器 Javascript 函数作用域问题

c++ - cmake 生成多个 compile_commands.json?

c++ - 调用其他程序的程序

ruby-on-rails - 正确的 Rails 模型命名空间

c++ - 有什么方法可以防止命名空间在 C++ 中添加更多类?

php - 使用基于 Composer 的库而不使用 Composer 包裹在同名类中?

c++ - 如何访问 ttf 字体(不是 otf)的 GDEF/GPOS/GSUB?