匹配两个字符串的宏定义
Macro definition that matches two strings
我想在 C++ 中用宏定义一个表达式,但我遇到了很多麻烦。
表达式为:
MATCH 字符串 WITH other_string
其中字符串和 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 }
因为 hi
是 main
结束前的最后一个标记,所以没有机会 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
);
}
我想在 C++ 中用宏定义一个表达式,但我遇到了很多麻烦。
表达式为:
MATCH 字符串 WITH other_string
其中字符串和 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 }
因为 hi
是 main
结束前的最后一个标记,所以没有机会 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
);
}