加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 有没有办法用相同的格式标志打印long int和int?

发布时间:2020-12-16 10:46:13 所属栏目:百科 来源:网络整理
导读:我有一个定义索引类型的代码,这样如果用户知道他们的索引空间保持在普通整数的范围内,他们可以使用int而不是long int. #ifdef LONG_IDX typedef long int idx_type #else typedef int idx_type #endif 我的代码中有一些printf语句打印出这个索引数据,我不想
我有一个定义索引类型的代码,这样如果用户知道他们的索引空间保持在普通整数的范围内,他们可以使用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确实如此),如果您搞砸了并忘记在某处使用已定义的字符串,则很可能会收到有用的警告.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读