匹配两个字符串的宏定义

Macro definition that matches two strings

我想在 C++ 中用宏定义一个表达式,但我遇到了很多麻烦。

其中字符串和 other_string 不需要 " "

例如:MATCH r1 WITH string1是我想要的结果。

这个宏的目的是检查 r1 字符串是否与 r2 匹配。

(我已经有配对码)

我想打电话给 MATCH hello WITH hi

在我的主要功能中

int main(){ 

    MATCH hello WITH hi

}

并从此宏调用我的函数来比较它们。 ** hello 和 hi 都是不带引号的参数,必须被视为变量名

简单地用 # 将你的论点串化,比如:

#define MATCH_WITH(str1, str2) MATCH #str1 WITH #str2

这样:

MATCH_WITH(testing, testing)

变成:

MATCH "testing" WITH "testing"

使用宏让你的代码看起来像另一种语言总是值得怀疑的。最好考虑为你的“meta-language”使用一个单独的解析器来为你生成 C++ 代码。

在这种情况下,由于 C++ 语法需要某种方式来指示语句的结束(右大括号或 semi-colon),您遇到了麻烦。

考虑你的例子:

int main () { MATCH hello WITH hi }

因为 himain 结束前的最后一个标记,所以没有机会 fix-up 语法来匹配 C++ 要求。

你不能随心所欲,所以你必须做一些不同的事情

如果您真的打算将此语法嵌入到您的 C++ 代码中,则需要标记标记以允许您 fix-up 该语法。我建议的语法是:

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
);
}

Live Demo