如何定义和测试宏的字符串值?

时间:2018-11-10 05:54:15

标签: c++ c

如果我定义宏一个数字并在条件中使用它,它将按照我想要的方式工作。但是当我将其定义为字符串时(我不确定是否为字符串)不是这样的:

#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

1 个答案:

答案 0 :(得分:2)

简短的答案是:不能。

预处理器仅理解#if中的整数表达式。这就是诸如"surjit"之类的字符串文字会导致错误的原因。

0 / #if中将未定义的标识符替换为#elif进行评估,这就是surjit == prachee成为0 == 0并评估为true的原因。

一种可能的解决方法是为这些名称赋予不同的整数值:

#define prachee 1
#define manish 2
#define surjit 3