【问题标题】:How to stringify an arithmetic result in a preprocessor macro如何在预处理器宏中对算术结果进行字符串化
【发布时间】:2015-10-09 23:44:13
【问题描述】:

我应该如何编写一个接收两个参数并(例如给出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...

【问题讨论】:

  • 我认为您正在寻找预处理器 '#' 操作。参见,例如,gcc.gnu.org/onlinedocs/cpp/Stringification.html(现在还不能将其重写为一个完整的答案,无论如何他们的描述都是一个很好的答案。顺便说一句,谷歌很容易找到这个,尽管它有助于了解你在寻找什么。)

标签: c macros c-preprocessor stringification


【解决方案1】:

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

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

注意%d 只接受整数值,因此您可能需要另一个宏来处理双精度/浮点数。

编辑

正如 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);

【讨论】:

  • 如果目标是生成字符串,则使用 sprintf。
【解决方案2】:
#define SOMMA(x, y) printf("The Sum Of A = %d and B= %d is %d",a,b,(a+b))

【讨论】:

    猜你喜欢
    • 2011-03-26
    • 2019-06-21
    • 2012-06-29
    • 2011-10-30
    • 2012-07-21
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多