如何在单独的 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 个我需要的全局变量做一些声明。其他一切都是用指针等完成的
我有两个问题。
- 例如在 config.h 中声明变量
int myVar
时,出现多重声明错误。为什么?
- 我可以将变量声明为
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 时,我们不会收到任何链接器错误。
我 运行 在 VScode 中编译时遇到问题,而不是在 Visual Studio 中编译时遇到问题。
我的项目的包含文件夹中有一个 header 文件 config.h
。请注意,我已将 build_flags = -I include
添加到 platformio.ini。在 config.h
中,我需要为 select 个我需要的全局变量做一些声明。其他一切都是用指针等完成的
我有两个问题。
- 例如在 config.h 中声明变量
int myVar
时,出现多重声明错误。为什么? - 我可以将变量声明为
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 时,我们不会收到任何链接器错误。