我有一个定义索引类型的代码,以便如果用户知道他们的索引空间保持在正常整数的范围内,他们可以使用int而不是long int.
#ifdef LONG_IDX
typedef long int idx_type
#else
typedef int idx_type
#endif
Run Code Online (Sandbox Code Playgroud)
我的printf代码中有一些语句可以打印出这个索引数据,我不希望将它们包装在#ifdef整个语句中.是否有格式标志来指定参数可以是a long int还是int?如果没有,有没有办法定义一个自定义格式标志,我可以简单地添加到我的索引类型定义?
unw*_*ind 12
您可以有条件地为索引类型定义格式化程序:
#ifdef LONG_IDX
typedef long long int idx_type
#define IDX_FORMAT "lld"
#else
typedef int idx_type
#define IDX_FORMAT "d"
#endif
Run Code Online (Sandbox Code Playgroud)
然后你当然需要在格式化调用中使用它,这可能会变得有点麻烦(并且一如既往!)要求你保持警惕并记住在你想要打印索引时正确执行:
idx_type my_index = 47;
print("my_index = %" IDX_FORMAT, my_index);
Run Code Online (Sandbox Code Playgroud)
注意上面如何使用C的相邻字符串文字的自动连接来在编译时"构建"正确的格式化字符串.这是C语法的一个很棒的功能的典型用法.
此外,如果您的编译器足够好以进行格式化字符串验证(GCC确实如此),如果您确实陷入困境并忘记在defined某处使用字符串,则很可能会收到有用的警告.
我会使用%lli(long long integer),并在打印时进行转换:
idx_type idx;
printf("%lli", (long long int) idx);
Run Code Online (Sandbox Code Playgroud)
我认为这将为您提供最可靠的印刷品.
| 归档时间: |
|
| 查看次数: |
2152 次 |
| 最近记录: |