如何在预处理器宏中对算术结果进行字符串化

时间:2015-07-20 18:14:05

标签: c macros c-preprocessor stringification

我应该如何编写一个接收两个参数的宏(例如32)返回以下输出?

The sum of 3 and 2 is 5

这就是我写的,但它没有编译:

#define SOMMA(x, y) puts("La somma di " #x " e " #y " e' " #(x+y));

调用它
SOMMA (a, b);

之前引入了ab

2 个答案:

答案 0 :(得分:3)

您可以使用printf代替puts并执行类似的操作。

#define SOMMA(x, y) printf("sum of %d and %d is %d\n", x, y, (x + y));

注意%d只接受整数值,因此您可能需要另一个用于double / floats的宏。

修改

正如rcgdlr所指出的,如果你想创建一个包含结果的字符串,你也可以使用sprintfsnprintf

#define MAXLEN 256
#define SOMMA(x, y, res) snprintf(res, MAXLEN, "sum of %d and %d is %d\n", x, y, (x + y));

使用它:

char buffer[MAXLEN];
SOMMA(4, 6, buffer);
printf("%s\n", buffer);

答案 1 :(得分:0)

#define SOMMA(x, y) printf("The Sum Of A = %d and B= %d is %d",a,b,(a+b))