如何在单独的 config.h 文件中声明全局变量

How to declare global variables in seperate config.h file

我 运行 在 VScode 中编译时遇到问题,而不是在 Visual Studio 中编译时遇到问题。

我的项目的包含文件夹中有一个 header 文件 config.h。请注意,我已将 build_flags = -I include 添加到 platformio.ini。在 config.h 中,我需要为 select 个我需要的全局变量做一些声明。其他一切都是用指针等完成的

我有两个问题。

  1. 例如在 config.h 中声明变量 int myVar 时,出现多重声明错误。为什么?
  2. 我可以将变量声明为 extern int myVar。但随后我需要在 .cpp 文件中重新声明变量 myVar,例如 main.cpp。如何做到最好?

最终,如何在 header 中声明一个全局变量,将 header 包含在其他几个文件中,然后全局使用该变量? (这主要是为了创建 queues 和信号量)

如果你只是想要全局常量,参考Defining global constant in C++。假设您需要一个可变的全局变量,有两种选择。无论哪种情况,我们的全局变量都只有一个实例。

经典解法:extern

// header file
extern MyQueue queue;

在这里,我们简单地说queue是在其他一些源文件中定义的。

// source file
MyQueue queue{1, 2, 3};

然后,我们在源文件中定义它。 另见 cppreference on external linkage

C++17 解决方案:inline

// header file (no source file needed)
inline MyQueue queue{1, 2, 3};

inline 对函数的作用与对变量的作用相同。它放宽了变量的单一定义规则 (ODR),允许我们在多个位置定义它。这样,当在多个源文件中包含 header 时,我们不会收到任何链接器错误。