我需要创建一个宏
DISP(sqrt, 3.0)
扩展为
printf("sqrt(%g) = %g\n", 3.0, sqrt(3.0));
这是我目前尚未完成的尝试:
#include <math.h>
#include <stdio.h>
#define DISP(f,x) printf(#f(%g) = %g\n", x, f(x))
int main(void)
{
DISP(sqrt, 3.0);
return 0;
}
gcc -E
表明我目前有一个额外的双引号。
如果我在#f之前放置任何双引号或双引号,或者如果我使用## f,则宏不再展开。怎么解决?
答案 0 :(得分:4)
答案 1 :(得分:3)
您可以使用:
#define DISP(f,x) printf(#f "(%g) = %g\n", x, f(x))
这扩展到
printf("sqrt" "(%g) = %g\n", 3.0, sqrt(3.0));
在C中,您可以将两个或多个字符串文字合并为一个,如下所示:
const char *txt = "one" " and" " two";
puts(txt);
将输出one and two
。
修改强>
另请注意,建议放置宏和宏参数 括号内:
#define DISP(f,x) (printf(#f "(%g) = %g\n", (x), (f)(x)))