声明一个接受预处理器宏的字符

Declaring a char which takes a preprocessor macro?

本文关键字:处理器 预处理 字符 一个 声明      更新时间:2023-10-16

我正在使用一个提供的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吗?如果是,我如何打印字符,以便在控制台上获得宏或宏值?

charostream上的<<重载有意打印ASCII符号。

您可以使用<< (int)v来避免这种行为。

使用char存储整数值没有错。尽管要注意char可以是unsigned类型,因此可能会使NOFAULT(如-1)的行为难以管理。

最好的做法是:使用int

您可以将int传递给char变量。如果int是32位,char是16位,或者您的int只是16位,那么您可以准备好对int的某些部分进行划痕。

要打印,您可以随时投射,

std::cout<< (int) your_char