是否有一个C预处理器宏来打印出一个结构?

Joh*_*den 1 c macros struct c-preprocessor

据我所知,没有办法在C中打印出一个struct值.

即,这不会飞:

typedef struct {
    int a;
    double b;
} stype

stype a;

a.a=3;
a.b=3.4;

printf("%z", a);
Run Code Online (Sandbox Code Playgroud)

相反,你必须说:

printf("a: %d\n", a.a);
printf("b: %f\n", a.b);
Run Code Online (Sandbox Code Playgroud)

这似乎是一个完美的地方,你可以使用宏来保存任意结构的大量输入.

C预处理器是否足够强大以执行此转换?

R..*_*R.. 7

我会制作两个宏,如下所示:

#define STYPE_FMT "%d %f"
#define STYPE_MEMS(s) (s).a, (s).b
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

printf("hello %s, stype: " STYPE_FMT "\n", "world", STYPE_MEMS(my_s));
Run Code Online (Sandbox Code Playgroud)

使这种方法优于结构的"打印功能"的原因是,您可以将宏与任何printf您喜欢的家庭功能一起使用,并组合其他数据的打印.

你可以变得更加漂亮,而是做:

#define STYPE_FMT "%d %.*f"
#define STYPE_MEMS(s) (s).a, 6, (s).b
#define STYPE_MEMS_PREC(s, p) (s).a, (int)(p), (s).b
Run Code Online (Sandbox Code Playgroud)

然后您可以使用默认精度或选择自定义精度.