gpt4 book ai didi

c++ - 如何在 C++ 中声明一个全局变量

转载 作者:IT老高 更新时间:2023-10-28 14:00:21 24 4
gpt4 key购买 nike

我知道不应该使用全局变量,但我需要它们。我读过在函数之外声明的任何变量都是全局变量。我已经这样做了,但是在另一个 *.cpp 文件中,找不到该变量。所以它并不是真正的全局性的。是不是必须创建一个头文件 GlobalVariabels.h 并将该文件包含到使用它的任何其他 *cpp 文件中?

最佳答案

I have read that any variable declared outside a function is a global variable. I have done so, but in another *.cpp File that variable could not be found. So it was not realy global.

根据作用域的概念,你的变量全局的。但是,您所阅读/理解的内容过于简单。


可能性 1

也许您忘记声明另一个翻译单元 (TU) 中的变量。这是一个例子:

a.cpp

int x = 5; // declaration and definition of my global variable

b.cpp

// I want to use `x` here, too.
// But I need b.cpp to know that it exists, first:
extern int x; // declaration (not definition)

void foo() {
cout << x; // OK
}

通常您会将 extern int x; 放置在包含在 b.cpp 中的头文件中,以及最终需要使用的任何其他 TU 中x.


可能性2

此外,变量可能具有内部链接,这意味着它不会跨翻译单元公开。如果变量标记为 const ([C++11: 3.5/3]),默认情况下会出现这种情况:

a.cpp

const int x = 5; // file-`static` by default, because `const`

b.cpp

extern const int x;    // says there's a `x` that we can use somewhere...

void foo() {
cout << x; // ... but actually there isn't. So, linker error.
}

您也可以通过将 extern 应用于 definition 来解决此问题:

a.cpp

extern const int x = 5;

这整个问题大致相当于你在使函数跨 TU 边界可见/可用时所经历的困惑,但你的处理方式有所不同。

关于c++ - 如何在 C++ 中声明一个全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9702053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com