gpt4 book ai didi

c - 使用 _Generic 进行 printf 格式化

转载 作者:行者123 更新时间:2023-12-04 02:27:31 25 4
gpt4 key购买 nike

我发现自己经常输入错误的格式类型,并且不记得何时执行 fLflf 等。是有没有办法在 _Generic 关键字的帮助下做类似下面的事情?

#define TYPE(X)   _Generic((X), float: "float", double: "double", long double: "long_double")
#define FORMAT(X) _Generic((X), float: "%f", double: "%f", long double: "%Lf")

printf("%s if of type %s\n", FORMAT(10.), 10., TYPE(10.));

基本上,我希望它打印:

10.000000 is of type double

有办法吗?

我想一个速记选项是做这样的事情:

#define TYPE(X)     _Generic((X), float: "float", double: "double", long double: "long_double")
#define STRINGIZE(X) #X
printf("%s if of type %s\n", STRINGIZE(10.), TYPE(10.));
  1. if of type double

最佳答案

printf 中的格式说明符不能单独作为参数。它们需要是格式字符串的一部分。

您可以通过使 FORMAT 宏成为整个格式字符串来实现这一点,以便一次调用 printf 来打印值。然后你可以再调用其他人:

printf(FORMAT(10.), 10.);
printf(" is of type %s\n", TYPE(10.));

但是,正如评论中所述,现代编译器足够聪明,可以检测到 printf 格式字符串与其参数之间的不匹配。因此,依靠它同样有效。

关于c - 使用 _Generic 进行 printf 格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66467106/

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