A Simple question
Tim McDaniel
mcdaniel at amara.uucp
Fri Apr 13 09:56:55 AEST 1990
yhe at zip.eecs.umich.edu (Youda He) asked about "printf("a=%X\n",a);",
where "a" is a signed char.
wallis at labc.dec.com (Barry L. Wallis) replies:
The %X specifier in printf() tells the function to interpret the
argument as an int. Since the actual value is a char it is pushed
on the stack as an int.
Those statements, in that order, may be ambiguous. (As I first read
them, they seemed to say that printf does the type conversion after
seeing %X!) To amplify:
Generally, an actual argument to a function undergoes "argument
promotion". For example, integral type arguments smaller than an
"int" are automatically and silently converted to "int". (The
compiler emits code to do this---the smaller-type values never reach
the function.) The variable "a", with value -1, is converted to an
"int" with value -1. printf (on the machine in question) prints an
int -1 as "FFFF".
ANSI C provides function prototypes, which allows you to avoid
argument promotion in most cases. However, printf has a variable
number of arguments, and prototypes can't help here.
--
Tim McDaniel
Applied Dynamics International, Ann Arbor, MI
Internet: mcdaniel%amara.uucp at mailgw.cc.umich.edu
UUCP: {uunet,sharkey}!amara!mcdaniel
More information about the Comp.lang.c
mailing list