如果我定义宏一个数字并在条件中使用它,它将按照我想要的方式工作。但是当我将其定义为字符串时(我不确定是否为字符串)不是这样的:
#define X surjit
#if(X == prachee)
#error "you're wrong"
#elif(X == manish)
#error "you're wrong again"
#elif(X == surjit)
#error "now you got it"
#endif
我希望它能打印now you got it
。但它会打印you're wrong
。
我什至尝试将其明确定义为
#define X "surjit"
但这会引发如下错误
error: token ""surjit"" is not valid in preprocessor expressions
答案 0 :(得分:2)
简短的答案是:不能。
预处理器仅理解#if
中的整数表达式。这就是诸如"surjit"
之类的字符串文字会导致错误的原因。
在0
/ #if
中将未定义的标识符替换为#elif
进行评估,这就是surjit == prachee
成为0 == 0
并评估为true的原因。
一种可能的解决方法是为这些名称赋予不同的整数值:
#define prachee 1
#define manish 2
#define surjit 3