字符串说明符(%d,%f等...)

Mha*_*one 2 c specifier

#include <stdio.h>
#define Type int

int main()
{
        Type x=3;
        printf("%d",x);
        return 0;

}
Run Code Online (Sandbox Code Playgroud)

代码很简单,工作正常.我的问题是,如果我改变 #define Type int#define Type float如此,我必须改变%d,以%f也.有没有办法有一个通用的说明符,将所有的工作int,float,char,string等...所以,如果我改变#define Type int那么我不必改变内部格式说明printf()功能?

ste*_*eha 5

这就是我的建议:

#include <stdio.h>

#define TYPE int
#define TYPE_FORMAT "%d"

int main()
{
    TYPE x=3;
    printf("Value of x is: " TYPE_FORMAT "\n", x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

无法printf()在C中创建自动检测类型.在C++中,您可以使用重载<<运算符,这自动计算出类型,但C没有类似的东西.

但是你可以#define使用格式和类型,如果你将多个字符串文字放在一起,C编译器会将它们自动合并为一个字符串常量.

PS而不是使用#define类型,你应该typedef这样使用:

typedef int TYPE;
Run Code Online (Sandbox Code Playgroud)

这意味着在调试器中,您可以看到您的变量x属于类型TYPE,而#define您可以将其视为类型int.

在一个完美的世界中,你会声明格式字符串,如下所示:

static char const * const TYPE_FORMAT = "%d";
Run Code Online (Sandbox Code Playgroud)

但我们并不是生活在一个完美的世界里.如果您执行上述声明TYPE_FORMAT,则编译器可能不够智能,无法将字符串与其他字符串文字合并.(我尝试使用GCC,并且正如我所料,我收到了错误消息.)所以对于TYPE_FORMAT你绝对应该使用#define.

摘要:使用typedeffor类型但使用#define格式.