我有一个返回整数值的函数.现在我想编写一个调用此函数的宏,获取返回值并在其前面添加一个字符串并返回结果字符串.
我试过这个:
#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)
使用函数,而不是宏.这里没有充分的理由使用宏.
您可以通过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