Issue #10454 has been updated by Max Anselm.
Well I can't get it to work for some reason. When I run this code:
~~~
#include <ruby.h>
VALUE func(VALUE arg)
{
VALUE str = rb_sprintf("%i %+i : %d %+d", Qtrue, Qtrue, Qtrue, Qtrue);
rb_funcall(rb_mKernel, rb_intern("puts"), 1, str);
rb_warn("%i %+i : %d %+d", Qtrue, Qtrue, Qtrue, Qtrue);
rb_raise(rb_eRuntimeError, "%i %+i : %d %+d", Qtrue, Qtrue, Qtrue, Qtrue);
}
int main(int argc, char* argv[])
{
ruby_init();
int state;
rb_protect(func, Qnil, &state);
return ruby_cleanup(state);
}
~~~
I get
~~~
20 +20 : 20 +20
<main>: warning: 20 +20 : 20 +20
<main>: 20 +20 : 20 +20 (RuntimeError)
~~~
----------------------------------------
Bug #10454: %i doesn't have any special behavior in rb_sprintf et al.
https://bugs.ruby-lang.org/issues/10454#change-49757
* Author: Max Anselm
* Status: Closed
* Priority: Normal
* Assignee: Zachary Scott
* Category: doc
* Target version:
* ruby -v: ruby 2.1.4p265 (2014-10-27 revision 48166) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
README.EXT claims:
> In the format string, `%i` is used for `Object#to_s` (or `Object#inspect`if ¡Æ+¡Ç flag is set) output (and related argument must be aVALUE).
But if you look at the code, this isn't true. %d and %i are handled the same in `BSD_vfprintf` (which is where all the printf functions end up). Has this ever been the case? I went back to when this documentation was added and it still looks like they're handled the same.
--
https://bugs.ruby-lang.org/