【发布时间】:2020-03-16 10:29:49
【问题描述】:
我有一个无符号整数变量 x,它的值介于 0 和 0xFFFFF 之间,我想以一种对用户更易读的方式打印它。
如果 x 大于 0xF000,则以十六进制打印,否则以十进制打印。
所以像这样的事情就可以了
if (x > 0xF000)
printf("%#x", x);
else
printf("%u", x)
但我想知道是否有更方便和更智能的方法来处理这个问题,例如根据值设置输出的条件格式。
【问题讨论】:
-
你所拥有的可能是最容易阅读的。除非有充分的理由让事情复杂化,否则我会停在这里。
-
如果您的程序的输出曾经被机器或外行人读取,那么变化的表示可能会非常混乱。如果你真的想这样做,我强烈建议以某种方式标记输出格式,也许通过在十六进制数字前加上
0x,你可以使用"0x%x"或"%#x"。 -
除了提到的其他问题之外,使用不是单个常量字符串的格式调用
printf可以说是糟糕的风格。一些风格指南不推荐它。我相信它是由一些编译器诊断出来的。这意味着编译器通常不能对格式字符串和参数之间的不匹配进行任何检查。
标签: c formatting printf