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预处理器是否足够强大以执行此转换?
我会制作两个宏,如下所示:
#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)
然后您可以使用默认精度或选择自定义精度.
| 归档时间: |
|
| 查看次数: |
3580 次 |
| 最近记录: |