Richard Heathfield said:
4.9.6.1 of C89:
d, i, o, u, x, X The int argument is converted to signed decimal ( d
or i ), unsigned octal ( o ), unsigned decimal ( u ), or unsigned
hexadecimal notation ( x or X );
Sure looks like int to me.
Extracting the relevant paragraphs of C89 4.9.6.1, starting from
page 133 of the hardcopy (X3.159-1989)
==== page 133 ====
o An option precision gives the minimum number of digits to appear
for the d, i, o, u, x, and X conversions, the number of digits
to appear after the decimal-point character for e, E, and f
conversions, the maximum number of significant digits for the
g and G conversions, or the maximum number of characters to
be written from a string in s conversion. The precision takes
the form of a period (.) followed either by an asterisk *
(described later) or by an option decimal integer; if only the
period is specified, the precision is taken as zero. If the
precision appears with any other conversion specifier, the
behavior is undefined.
o An optional h specifiing that the following d, i, o, u, x, or X
conversion specifier applies to a short int or unsigned short int
argument (the argument will have been promoted according
to the integral promotions, and its value shall be converted to
short int or unsigned short int before printing); an optional h
specifying that a following n conversion specifier applies to
a pointer to a short in argument; an optional l (ell)
specifying that the following d, i, o, u, x, or X conversion
specifier applies to a long int or unsigned long int argument;
an optional l specifying that a following n conversion specifier
applies to a poiner to a long int argument; or an optional L
specifying that a following e, E, f, g, or G conversion specifier
applies to a long double argument. If an h, l or L appears
with any other conversion specifier, the behavior is undefined.
[...]
The flag characters and their meanings are
[...]
# The result is to be converted to an "alternate form". For o
conversions, it increases the precision to force the first digit
of the result to be a zero. For x (or X) conversion, a
nonzero result with have 0x (or 0X) prefixed to it. For
e, E, f, g, and G conversion, the result will always contain
a decimal-point character, even if no digits follow it.
(Normally, a decimal-point character appears in the result of
these conversions only if a digit follows it.) For g and G
conversions, trailing zeros will not be removed from the
result. For other conversions, the behavior is undefined.
==== page 134 ====
0 For d, i, o, u, x, X, e, E, f, g, and G conversions, leading zeros
(following any indication of sign or base) are used to pad to
the field width; no space padding is performed. If the 0 and -
flags both appear, the 0 flag will be ignored. For d, i, o, u,
x, and X conversions, if a precision is specified, the 0 flag
will be ignored. For other conversions, the behavior is undefined.
The conversion specifiers and their meanings are
d,i The int argument is converted to signed decimal in the style
[-]dddd. The precision specifies the minimum number of digits
to appear; if the value being converted can be represented in
fewer digits, it will be expanding with leading zeros. The
default precision is 1. The result of converting a zero value with
a precision of zero is no characters.
o,u,x,X The unsigned int argument is converted to unsigned octal (o),
unsigned decimal (u), or unsigned hexadecimal notation (x or X)
in the style dddd; the letters abcdef are used for x conversion
and the letters ABCDEF for X conversion. The precision specifies
the minimum number of digits to appear; if the value being
converted can be represented in fewer digits, it will be expanded
with leading zeros. The default precision is 1. The result of
converting a zero value with a precision of zero is no characters.
c The int argument is converted to an unsigned char, and the
resulting character is written.
====
The text quoted by Richard Heathfield does NOT appear in
C89 4.9.6.1 in the hardcopy version. (I do not know what his source
was.)