为什么在printf中不推荐使用%b?

时间:2016-10-10 16:10:20

标签: printf ocaml

Printf module API详细说明了类型转换标志,其中包括:

%B: convert a boolean argument to the string true or false
%b: convert a boolean argument (deprecated; do not use in new programs).

但它没有说明为什么%b被弃用。为什么%B优于%b

1 个答案:

答案 0 :(得分:3)

人们会在官方上回答:使用大写字母进行转换,例如// Get the location of the user's browser using the native geolocation service. navigator.geolocation.getCurrentPosition( function (position) { // Check to see if there is already a location. There is a bug in FireFox where this gets invoked more than once with a cached result. if (locationMarker){ return; } %C(不是%S%c)以OCaml的可解析格式打印。 %s更改为%b之后,因为它将布尔值打印为%Btrue,这些布尔值也是OCaml可解析的。

你可以在这里找到一个背景故事:http://caml.inria.fr/mantis/view.php?id=1438。有一个分支引入了这个false然后改变了%B对二进制文件的含义。后者破坏了向后兼容性,因此该部分被拒绝。结果,今天我们为布尔%b%B进行了两次转换。