如何在 printf 格式上参数化 float 的精度

How to parameterize precision of float on printf format

我有一个 C 程序,可以将测量值输出到标准输出。我使用 printf 来显示它们,格式允许我更改精度

 printf("Scan=%d S_0=%.5f S_1=%.5f S_2=%.5f S_3=%.5f", scanId, S0, S1, S2, S3);

我的问题是我有很多像这样的打印,如果我想快速更改精度,我必须对每一个进行更改。我想知道是否可以使用 #define 之类的东西将它放在精确的位置,并且它会在编译时应用于每个 printf。我知道不重新编译是不可能的,但我同意。我知道我在 python 中询问的类似内容是:

f"{s_0:.{prec}f}"

一种方法是像这样 #define(如您所猜):

#define PFLT "%.5f"

printf("Scan=%d S_0=" PFLT " S_1=" PFLT " S_2=" PFLT " S_3=" PFLT, scanId, S0, S1, S2, S3);

然后要更改精度,您只需更改 #define 并重新编译。

您可以使用 * 符号代替精度,在这种情况下,精度作为参数给出。然后你可以定义一个常量传递给printf.

#define P_FLOAT 5

printf("Scan=%d S_0=%.*f S_1=%.*f S_2=%.*f S_3=%.*f", 
       scanId, P_FLOAT, S0, P_FLOAT, S1, P_FLOAT, S2, P_FLOAT, S3);