C预处理程序将值分配给多种类型

问题描述 投票:-1回答:1

因此,我正在编写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时无法使用此宏,如何解决此问题?

c string macros preprocessor lexer
1个回答
0
投票

您不能使其作为宏工作,因为C预处理器中的宏仅执行字符串插值,因此麻烦的行会这样做:

    case VAL_NUMBER: token.value.as.number=(double)"some_string"; break;

只需使用一个函数即可。没有明显的理由使该片段成为宏。

© www.soinside.com 2019 - 2024. All rights reserved.