c - printf 未知精确类型的整数

标签 c

我已经把我的代码放在

typedef int myinteger ;

但是,如果我将 typedef 更改为另一种整数类型,我希望我的所有代码继续有效。

现在我想打印一个 myinteger 类型的变量。这是一种正确的方法吗?我刚刚发现了以下“hack”:

printf("%lld", myvariable) ;

希望任何整数类型都适合 long long 并且编译器会进行正确的转换。它似乎适用于 gcc(尽管我有一个警告)。 printf 是一个问题,但它们也可能是其他问题(比如找到最大的“myinteger”)。

更一般地说,是否有可能/希望尝试我尝试实现的目标,编写代码时仅假设 myinteger 指的是某种整数类型?

最佳答案

我推荐:

typedef int my_type_t;
#define FMT_MY_TYPE "%d"

然后:

my_type_t my_var = 0;
printf("Here is my_var: " FMT_MY_TYPE "\n", my_var);

这甚至适用于结构。这是一个概括:

typedef struct { int a; int b; } my_struct_t;
#define FMT_MY_STRUCT "{a: %d, b: %d}"
#define FMT_MY_STRUCT_ARG(x) (x).a, (x).b

然后:

my_struct_t my_var = {0, 1};
printf("Here is my_var: " FMT_MY_STRUCT "\n", FMT_MY_STRUCT_ARG(my_var));

关于c - printf 未知精确类型的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34545271/

相关文章:

c++ - Eclipse (C/C++) 错误 : Job found still running after platform shutdown

c - 验证截至当前时间的日期

c - 如何读取以 ',."/( )""\n 分隔的字符串

c - 是否可以用一个简单的宏在 C 中创建 N 个变量?

c - 从内存中获取操作数的最坏情况时间

c - C 编程语言教科书 Joy of C 中的 "grading"练习问题

c++ - SQLite 中的并发访问

c - Solaris 10 上更好的内存(堆)管理

c - 从由 "/"分隔的一系列字符串中截取最后一个字符串

c - spi驱动中的基本设备操作