声明一个带有预处理器宏的char?

时间:2016-04-13 06:53:49

标签: c++ macros char int

我正在使用提供的API,它对整数有一些宏定义,如下所示:

// Macros for logic values
#define LOGIC_UNSET -1
#define LOGIC_ZERO   0
#define LOGIC_ONE    1
#define LOGIC_D      2 
#define LOGIC_DBAR   3
#define LOGIC_X      4 

// Macros for fault types
#define NOFAULT   -1
#define FAULT_SA0 0
#define FAULT_SA1 1

现在,在其中一个API函数中,它声明了char类型的变量,并且分配给此char的值是其中一个宏的值。

bool getObjective(Gate* &g, char &v, Circuit* myCircuit)

其中v收到LOGIC宏的值。

这对我来说没有意义,当我试图在char上做cout时,我得到的ascii符号并没有帮助我。我真的很困惑。这是一个错误吗?您可以将int传递给char吗?如果是,我如何打印char以便我在控制台上获得宏或宏值?

2 个答案:

答案 0 :(得分:2)

<< ostream char故意打印ASCII符号。

您可以使用<< (int)v来消除此行为。

使用char存储整数值没有任何问题。虽然请注意char可以是unsigned类型,但这可能会使NOFAULT(作为-1)的行为难以管理。

最好的办法:使用int

答案 1 :(得分:1)

您可以将int传递给char变量。如果int为32位且char为16位,或者您的int仅为16位,则表示您已准备好为int的某些部分留下痕迹。

要打印,你总是可以施放,

std::cout<< (int) your_char