c++ - 在全局变量的 header 和源中使用 "extern int x"中的 extern 关键字是否正确?

标签 c++ global-variables extern

有一个名为 BOT_TIME 的变量,它随游戏的难度而变化,因此不是 const。有很多文件使用它。我打算将它用作全局变量。

1)constants.h 中,我声明它 extern int BOT_TIME。 在 constants.cpp 中,我声明它 extern int BOT_TIME

BUILD => 在所有源中对变量的 undefined reference (是的,我已经包含了 header )。

2)constants.h 中,我将其声明为 int BOT_TIME。 在 constants.cpp 中,我将其声明为 int BOT_TIME。 由于 non-consts 默认为 extern ,因此我决定保留该关键字。

BUILD => 变量的多重定义(显示在包含constants.h的每个源文件中)

3)constants.h 中,我声明它 extern int BOT_TIME。 在 constants.cpp 中,我将其声明为 int BOT_TIME

这有效。

问题出在哪里?

将变量初始化为 constants.cpp 中的内容使其适用于情况 1 和 3。

这是怎么回事? 哪种方法是正确的?

最佳答案

您可以根据需要多次声明变量,但可以而且必须只定义一次。

extern int BOT_TIME;

是一个声明。

int BOT_TIME;

是一个定义。

定义必须出现在单个实现文件中。

Since non-consts are by default extern , I decided to leave that keyword.

不。你怎么想到的?

回答问题:

1) 没有定义,只有声明。

2) 这个假设是错误的。您多次定义该符号。

3)它之所以有效,是因为这是正确的方法。

来自评论:

当你用extern声明一个变量时,你指定它具有外部链接,是的,但你只声明它,而不定义它。如果您不使用 extern 关键字,它仍然具有外部链接,但它也是一个定义。

关于c++ - 在全局变量的 header 和源中使用 "extern int x"中的 extern 关键字是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12455467/

相关文章:

jquery - 如何将键/值对添加到 JQuery 中的全局变量?

c++ - 使用无锁算法阻塞并发队列

c++ - 用于 C++ 图像分析的 OpenCV 二进制图像掩码

c++ - 根据类定义分配的存储

java - 从内部类读取外部类的值

php - 将两个 JavaScript 变量传递给 PHP 变量

c++ - 在 MFC C++ App 中实现外部 WINAPI 调用

c - 在 C 中使用 extern 无法按预期工作

c++ - 如何确保 win-builder 使用 c++11 构建我的包?