#include <stdio.h>
#define Type int
int main()
{
Type x=3;
printf("%d",x);
return 0;
}
代码简单,运行良好。我的问题是,如果我将 #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;
}
没有办法制作printf()
在 C 中自动检测类型。在 C++ 中,您可以使用重载的 <<
运算符,确实自动计算出类型,但 C 没有类似的东西。
但是你可以#define
格式和类型,如果您将多个字符串文字并排放置,C 编译器会自动将它们合并为一个字符串常量。
附言而不是使用 #define
对于类型,您可能应该使用 typedef
像这样:
typedef int TYPE;
这意味着在调试器中,您可以看到您的变量 x
类型为 TYPE
, 而与 #define
你会看到它的类型 int
.
在一个完美的世界中,你会像这样声明格式字符串:
static char const * const TYPE_FORMAT = "%d";
但我们并不生活在一个完美的世界中。如果您对 TYPE_FORMAT
进行上述声明,编译器可能不够聪明,无法将字符串与其他字符串文字合并。 (我用 GCC 试过了,正如我预料的那样,我收到了一条错误消息。)所以对于 TYPE_FORMAT
你绝对应该使用#define。
总结:使用typedef
对于类型,但使用 #define
格式。
关于c - 字符串说明符( %d 、 %f 等...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11784481/