我想根据作为参数传递给MACRO FUNCTION的值创建一个字符串。 喜欢的东西:
#define ABC(x,y) return "anystr_x_y.tar.bz2"
main()
{
a = ABC(2,3);
}
所以最后,它应该返回“anystr_2_3.tar.bz2”
我想知道如何创建该字符串,并将值作为参数传递给MACRO fnc。
任何帮助! 谢谢!
答案 0 :(得分:8)
使用“stringize operator”:
这样定义你的宏#define ABC(x,y) "anystr_" #x "_" #y ".tar.bz2"
答案 1 :(得分:1)
宏不会返回内容,因为它们不是函数。它们仅仅是令牌替换功能。你真正想要的只是一个,而在你的位置,我会用一个函数来做。但是,解决方案可能如下所示:
#define ABC(x,y) "anystr_" #x "_" #y ".tar.bz2"
这可以利用字符串文字折叠到更高的事实,因此"Hello " "World!"
被解释为"Hello World!"
。
答案 2 :(得分:0)
C(也不是C ++)中没有宏功能。在编译代码之前,宏由预处理器处理。上面的示例代码将由编译器处理:
main()
{
a = return "anystr_x_y.tar.bz2"
}
要实现您要执行的操作,您需要告诉预处理器连接x,y和字符串的常量部分。你可以使用##运算符,例如:
#define ABC(x,y) ("anystr_" ## x ## "_" ## y ## ".tar.bz2")
这将导致以下代码传递给编译器:
main()
{
a = ("anystr_2_3.tar.bz2")
}