【发布时间】:2019-11-22 21:51:08
【问题描述】:
所以我正在编写一个 Lexer,但我的宏在生成令牌时遇到了问题(令牌是一个具有值类型(枚举)和值(联合)的结构。
#define MAKE_TOKEN(token, tokenType, valueType, tokValue) \
token.type=tokenType; \
token.value.type=valueType; \
switch(valueType){ \
case VAL_NIL: break; \
case VAL_BOOL: token.value.as.boolean=(bool)tokValue; break; \
case VAL_NUMBER: token.value.as.number=(double)tokValue; break; \
case VAL_STRING: token.value.as.string=(char*)tokValue; break; \
}
例如,如果 tokValue 为 5(因为 5 可以转换为 bool、double 和 char*),则此方法有效,但是,由于编译器无法将字符串转换为 double,因此无法编译。这意味着当值类型为 VAL_STRING 时无法使用此宏,我该如何解决?
【问题讨论】:
-
我不明白你的解释。您可以添加更多信息和/或更好地解释吗?您的示例中没有
double。 -
为什么这是宏而不是函数?
标签: c string macros preprocessor lexer