#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()功能?
这就是我的建议:
#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格式.