gpt4 book ai didi

c - 在格式化的 printf 中使用 #define 来定义精度

转载 作者:行者123 更新时间:2023-12-04 23:11:54 25 4
gpt4 key购买 nike

#include <stdio.h>
#define PREC 4

int main()
{
long l = 12;
printf("%PRECld", l);
}

我将如何使用 PREC定义所需的精度?即预期的输出将是 0012 .正在打印 %PRECld .

最佳答案

要扩展宏使其成为编译时格式字符串的一部分,您需要一个字符串化宏(是的,两层是必需的;如果您只定义了 #define STR(x) #xSTR(PREC) 将插入字符串 "PREC" ,不是您想要的 "4"):

#define _STR(x) #x
#define STR(x) _STR(x)

然后你可以像这样使用它:
printf("%0" STR(PREC) "ld", l);

这将被预处理器扩展为:
printf("%0" "4" "ld", l);

并且由于相邻的字符串文字被视为单个字符串,因此最终编译时就像您直接键入:
printf("%04ld", l);

对于运行时解决方案,您可以使用 *从参数动态设置精度,不需要字符串化宏:
printf("%0*ld", PREC, l);

理论上,这在运行时稍慢,因为它需要解析更复杂的格式字符串,传递和接收更多参数等,但在实践中 I/O 是如此昂贵以至于一点 CPU 摆弄的成本在比较。

注意添加的 0在这两个版本中,使其填充零,而不是空格。

关于c - 在格式化的 printf 中使用 #define 来定义精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58847520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com