### Question 15.2

How can `%f` be used for both `float` and `double` arguments in `printf`? Aren't they different types?

In the variable-length part of a variable-length argument list, the ``default argument promotions'' apply: types `char` and `short int` are promoted to `int`, and `float` is promoted to `double`. (These are the same promotions that apply to function calls without a prototype in scope, also known as ``old style'' function calls; see question 11.3.) Therefore, `printf`'s `%f` format always sees a `double`. (Similarly, `%c` always sees an `int`, as does `%hd`.) See also questions 12.9 and 12.13.

References: ANSI Sec. 3.3.2.2
ISO Sec. 6.3.2.2
H&S Sec. 6.3.5 p. 177, Sec. 9.4 pp. 272-3

Read sequentially: prev next up top

This page by Steve Summit // Copyright 1995 // mail feedback