From: silverhammermba+ruby@... Date: 2014-10-31T20:51:59+00:00 Subject: [ruby-core:66038] [ruby-trunk - Bug #10454] %i doesn't have any special behavior in rb_sprintf et al. 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 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
: warning: 20 +20 : 20 +20
: 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 a VALUE). 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/