为什么我在宏中获取特定基本数据类型的printf格式?

时间:2011-10-16 01:50:35

标签: c macros

如何撰写FORMAT_OF(type),以便%dint%schar *等。

是否有宏来获取基本数据类型的格式?

4 个答案:

答案 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中没有任何内置宏,但您可以轻松编写包装函数来实现此目的。