我有一个定义索引类型的代码,这样如果用户知道他们的索引空间保持在普通整数的范围内,他们就可以使用 int
而不是 long int
.
#ifdef LONG_IDX
typedef long int idx_type
#else
typedef int idx_type
#endif
我的代码中有一些 printf
语句来打印出该索引数据,我不想将它们到处都包裹在 #ifdef
语句中。是否有格式标志指定参数可以是 long int
或 int
?如果没有,有没有办法定义一个自定义格式标志,我可以简单地将其添加到我的索引类型定义中?
最佳答案
您可以有条件地为您的索引类型定义格式化程序:
#ifdef LONG_IDX
typedef long long int idx_type
#define IDX_FORMAT "lld"
#else
typedef int idx_type
#define IDX_FORMAT "d"
#endif
然后你当然需要在格式化调用中使用它,这可能会变得有点麻烦并且(一如既往!)需要你保持警惕并记住在你想要打印索引时正确地做:
idx_type my_index = 47;
print("my_index = %" IDX_FORMAT, my_index);
请注意上面的代码如何使用 C 语言自动连接相邻字符串文字以在编译时“构建”正确的格式化字符串。这是 C 语法的这一令人敬畏的特性的典型用法。
此外,如果您的编译器足够好,可以进行格式化字符串验证(GCC 可以),那么如果您搞砸了并且忘记在某处使用 defined
字符串,您很可能会收到有用的警告。
关于c++ - 有没有办法用相同的格式标志打印 long int 和 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9703254/