【发布时间】:2021-03-04 00:59:51
【问题描述】:
我发现自己经常输入错误的格式类型,不记得何时执行f 或Lf 或lf 等。有没有办法在@ 的帮助下执行以下操作987654324@关键字?
#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 是双精度类型
有没有办法做到这一点?
我想一个速记选项是这样的:
#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.));
- 如果是双精度类型
【问题讨论】:
-
大多数流行的编译器都有解析文字格式字符串的能力,并且可以警告你类型不匹配。启用它而不是弄乱宏更值得。
-
@StoryTeller-UnslanderMonica 当然可以,但这也为我自己提供了很好的文档,我可以在一个地方查看所有类型格式。
-
重复
10.3 次的要求似乎是这件事的一个缺点。
标签: c c-preprocessor