如何从C中的MACRO函数返回一个字符串?

时间:2011-10-13 06:37:56

标签: c string macros c-preprocessor

我想根据作为参数传递给MACRO FUNCTION的值创建一个字符串。 喜欢的东西:

#define ABC(x,y) return "anystr_x_y.tar.bz2"
main()
{
   a = ABC(2,3);
}

所以最后,它应该返回“anystr_2_3.tar.bz2”

我想知道如何创建该字符串,并将值作为参数传递给MACRO fnc。

任何帮助! 谢谢!

3 个答案:

答案 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")
}