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/