C 全局变量声明

新手上路,请多包涵

我想要做的只是在头文件中定义一个变量并将其用于两个不同的 cpp 文件,而无需在每次包含该头文件时重新定义该变量

这是我尝试的方法:

变量.h

 #ifndef VARIABLES_H // header guards
#define VARIABLES_H

static bool bShouldRegister;

#endif

(我也尝试过 extern 但没有任何改变)

在一个 cpp 文件中,我给它一个值 ::bShouldRegister = truebShouldRegister = true;

在我的另一个 cpp 文件中,我通过创建一个线程并在循环中检查它的值来检查它的值(是的,我的线程函数运行良好)

  while (true)
 {
     if (::bShouldRegister) // Or if (bShouldRegister)
        {
            MessageBox(NULL,"Value Changed","Done",MB_OK|MB_ICONINFORMATION);
        }
  Sleep(100);
 }

是的,那个 MessageBox 永远不会出现(bShouldRegister 永远不会成为真:/)

原文由 Shahriyar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 502
2 个回答

您应该使用 extern 否则您将在每个翻译单元中使用可能不同的值分隔 bShouldRegister 变量。

把它放在头文件(.h)中:

 extern bool bShouldRegister;

把它放在一个实现文件(.cpp)中:

 bool bShouldRegister;


另一种更简单的方法是使用 inline 关键字。将变量放在头文件中,如下所示:

 inline bool bShouldRegister;

原文由 masoud 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果可以使用 C++17,请考虑使用内联变量:

 // in a header file
inline bool bShouldRegister = true;

请参阅 内联变量如何工作? 了解更多信息。

原文由 bcd 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题