在C初始化的全局变量++

问题描述:

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

//in .h file 
extern bool blindFound; 

// in .cpp file 
bool blindFound = false; 

但是当我打印内的其他方法它的价值,它给了我()不假!

感谢,

+0

如何打印? – hivert

+0

printf(“blindFound:%s \ n”,blindFound); – noor

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

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

现在错误是你正在打印一个布尔值作为字符串“%s”。您应该将其打印为整数“%d”。然后false将显示为0并且为真。

+0

C++,哦,似乎这是错误。谢谢。 – noor

+0

@ alsadi90如果您使用C++,为什么不使用C++提供的I/O方法? 'std :: cout'和'std :: cin'。 – Muepe

+0

我正在网络模拟器上工作,这是它的常用方法 – noor

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

答案以上是一个小错误。

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

请尽量避免老printf从C

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; 
} 

它往往是更好的功能来包装这些变量,使其局部静态对象。这有效地避免了初始化顺序问题。

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

用法:

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

看一看的C++ FAQ关于所谓的“静态变量初始化顺序的悲剧”的更多信息。