c - 字符串说明符( %d 、 %f 等...)

标签 c specifier

#include <stdio.h>
#define Type int

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

}

代码简单,运行良好。我的问题是,如果我将 #define Type int 更改为 #define Type float 所以,我必须将 %d 更改为 % f 也是。有什么方法可以得到一个通用说明符,它适用于所有 intfloatcharstring等等... 这样一来,如果我更改 #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/

相关文章:

c - 尝试从命令行获取星号 * 作为对 main 的输入

c - 声明符是否有可能具有零声明说明符?

C 预处理器定义替换字符串格式说明符

c - 如何将 ANTLR C 语法中的 postfix_expression 转换为 AST?

python - 重复将值写入现有文件

c++ - 无效的静态断言行为

c - 使用 strncpy 删除 char* 的一部分

c++ - 错误: C++ requires a type specifier for all declarations

c++ - 缺少类型说明符 - C++ 中假定的 Int