[Comm] А я тут багу в printf(3) нашел :-) (take two)

Alexey Morozov =?iso-8859-1?q?morozov_=CE=C1_novosoft=2Eru?=
Вт Июл 15 13:54:35 MSD 2003


Выдержка из man 3 printf (секция the field width):

Instead of a decimal  digit  string one may write `*' or `*m$' (for some 
decimal integer m) to specify that the field width is given in the next 
argument, or in the m-th argument, respectively, which must be of type int.

Внимание, вопрос:

что согласно этой доке напишет

printf("%0*d %d %d %d\n", 2, 4, 8, 16);
printf("%0*1$d %d %d %d\n", 2, 4, 8, 16);
printf("%0*2$d %d %d %d\n", 2, 4, 8, 16);

?

Полученный мной результат меня несколько удивил (в первую очередь, своей 
нелогичностью). Что самое смешное, этот  результат совпадает на Linux 
(glibc-2.2.6), FreeBSD (4.8-STABLE) и MS Windows 2000 (MS VC++ 6). Я так 
понимаю, пора заполнять lawsuit "SCO против всех", в котором говорить, что 
printf украден, потому что совместим по багам :-).

P.S. Но в MSDN, по крайней мере, дока про '*' соответствует истине ('*m$' не 
задокументирован вовсе)
-- 
С уважением,
Алексей Морозов




Подробная информация о списке рассылки community