我想用C ++在C ++中定义一个表达式,我遇到了很多麻烦。
表达式为:
MATCH 字符串 WITH other_string
其中string和other_string不需要“”
例如: MATCH r1 WITH string1 是我想要的结果。
此宏的目的是检查r1字符串是否与r2匹配。
(我已经有了匹配的代码)
我想打电话给 MATCH你好
在我的主要功能
中int main(){
MATCH hello WITH hi
}
并从此宏调用我的函数来比较它们。 ** hello和hi都是不带引号的参数,必须被视为变量名
答案 0 :(得分:0)
只需使用#
字符串化您的参数,例如:
#define MATCH_WITH(str1, str2) MATCH #str1 WITH #str2
那样:
MATCH_WITH(testing, testing)
变为:
MATCH "testing" WITH "testing"
答案 1 :(得分:0)
使用宏来使代码看起来像一种不同的语言总是不确定的。最好考虑为你的元语言使用单独的解析器"为您生成C ++代码。
在这种情况下,由于C ++语法需要某种方式来指示语句的结尾(关闭括号或分号),所以你会遇到麻烦。
考虑你的例子:
int main () { MATCH hello WITH hi }
由于hi
是main
结尾之前的最后一个标记,因此没有机会修复语法以符合C ++要求。
如果您真的打算将此语法嵌入到C ++代码中,则需要使用标记令牌来修复语法。我提出的语法是:
int main () {
BEGIN_MATCHING
MATCH hello WITH hi
MATCH hello WITH hi
END_MATCHING
};
如果此语法可以接受,则可以使用以下宏。
#define BEGIN_MATCHING ((void)0
#define MATCH ); my_function(
#define WITH ,
#define END_MATCHING );
这将使建议的语法示例中的代码扩展为:
int main () {
((void)0
); my_function( hello , hi
); my_function( hello , hi
);
}