如何撰写FORMAT_OF(type)
,以便%d
为int
,%s
为char *
等。
是否有宏来获取基本数据类型的格式?
答案 0 :(得分:5)
是。但它仅在C11中提供。
#define FORMAT_OF(x) _Generic((x), \
int: "%d", \
unsigned: "%u", \
const char *: "%s", \
void *: "%p")
对于类型而不是值,您可以尝试_Generic((type) 0, ...
。
您的编译器可能不支持C11。 GCC 4.6(但不是4.5!)通过-std=c1x
或-std=gnu1x
启用了一些C11支持,但我认为还不支持_Generic
。
答案 1 :(得分:1)
没有。目前C的标准化版本不支持此类型的内省。
答案 2 :(得分:0)
好吧,如果你只想让宏取一个类型,你可以:
#define FORMAT_int "%d"
#define FORMAT_char "%c"
...
#define FORMAT(x) FORMAT_##x
稍后使用FORMAT(int)
;但是
int i;
FORMAT(i);
不工作,FORMAT(char*)
也无法正常工作。
答案 3 :(得分:-2)
C中没有任何内置宏,但您可以轻松编写包装函数来实现此目的。