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



我遇到了在VS代码中编译而不是在Visual Studio中编译的问题。

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

我的问题有两个方面。

  1. 当在config.h中声明一个变量(例如int myVar(时,我会得到一个多重声明错误。为什么
  2. 我可以将变量声明为extern int myVar。但是,我需要在.cpp文件中重新声明变量myVar,比如main.cpp。如何最好地做到这一点

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

如果您只想要全局常量,请参阅在C++中定义全局常量。假设您需要一个可变的全局变量,有两种选择。无论哪种情况,我们的全局变量都只有一个实例。

经典解决方案:extern

// header file
extern MyQueue queue;

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

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

然后,我们在源文件中定义它。另请参阅外部链接上的cppreference

C++17解决方案:inline

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

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