在c ++中初始化全局变量

时间:2014-03-30 08:04:35

标签: c++ global-variables

我在“.h”文件中声明了布尔全局变量,并将其初始化为“.cpp”文件, 我遇到了一个错误,我搜索了解决方案,发现我必须将其定义为extern,如下所示:

//in .h file
extern bool blindFound;

// in .cpp file
bool blindFound = false;

但是当我在其他方法中打印它的值时,它给了我( Null )不是假的!!

谢谢,

3 个答案:

答案 0 :(得分:2)

printf(" blindFound: %s \n", blindFound ); 

是C还是C ++?你的编译器也应该警告你。打开警告并注意它们。

现在的错误是您将布尔值打印为字符串"%s"。你应该把它打印成一个整数"%d"。然后false将显示为0,true将显示为1。

答案 1 :(得分:0)

你应该使用std::boolapha是C ++。

上面的答案是一个小错误。

http://www.parashift.com/c++-faq-lite/iostream-vs-stdio.html

请尽量避免使用旧版printf

http://www.cplusplus.com/reference/ios/boolalpha/

// modify boolalpha flag
#include <iostream>     // std::cout, std::boolalpha, std::noboolalpha

int main () {
  bool b = true;
  std::cout << std::boolalpha << b << '\n';
  std::cout << std::noboolalpha << b << '\n';
  return 0;
}

答案 2 :(得分:0)

通常最好将这些变量包装在函数中,使它们成为本地静态对象。这有效地避免了初始化顺序问题。

bool &blindFound()
{
  static bool blindFound = false;
  return blindFound;
}

用法:

blindFound() = true; // set value
bool b = blindFound(); // read value

有关所谓的“静态初始化顺序惨败”的更多信息,请查看C++ FAQ