C中的宏调用函数返回整数然后返回一个字符串

iqs*_*tic 5 c macros function

我有一个返回整数值的函数.现在我想编写一个调用此函数的宏,获取返回值并在其前面添加一个字符串并返回结果字符串.

我试过这个:

#define TEST(x)        is_enabled(x)
Run Code Online (Sandbox Code Playgroud)

我在main函数中将此宏称为:

int ret = 0;
ret = TEST(2);
printf("PORT-%d\n", ret);
Run Code Online (Sandbox Code Playgroud)

这非常有效.但是我希望宏返回字符串PORT-x,其中,x是被调用函数的返回值.我怎样才能做到这一点?

编辑:

我也尝试将它写成多行:

#define TEST(x)\
{\
    is_enabled(x);\
}
Run Code Online (Sandbox Code Playgroud)

并在主函数中将其称为:

printf("PORT-%d\n", TEST(2));
Run Code Online (Sandbox Code Playgroud)

但这会产生编译时错误:

error: expected expression before â{â token
Run Code Online (Sandbox Code Playgroud)

Ant*_*tzi 5

使用函数,而不是宏.这里没有充分的理由使用宏.

您可以通过sprintf(3)与malloc或缓冲区结合使用来解决它.有关详细信息,请参阅创建C格式化字符串(不打印它们)或手册页.

关于您的编辑:您不需要{}在宏中使用大括号,并且它们会导致您的错误,因为预处理会将其转换为类似

printf("format%d", {
  is_enabled(x);
}); 
Run Code Online (Sandbox Code Playgroud)

要更好地理解宏,请使用-E标志运行gcc或clang,或尝试阅读本文:http://en.wikipedia.org/wiki/C_preprocessor