Hi, On Fri, 16 Jan 2004, Bernhard Walle wrote:
ich glaube ganz so einfach ist es doch nicht. Richtig sollte man %hd (short) oder %hhd (char) angeben.
printf() ist eine variadic function. D.h. das _alle_ Argument nach dem Formatstring den default promotions unterworfen sind. U.a. heisst dies, dass 'char' und 'short' bei Uebergabe an printf() implizit nach 'int' umgewandelt werden. Damit ist '%d' (oder %u) also immer passend fuer chars und shorts. Der Modifikator 'h' oder 'hh' fuehrt nur dazu, dass das 'int' Argument vor Ausgabe wieder nach 'short' oder 'char' gecastet wird. An der Semantik aendern beide Modifikatoren also nichts, sie wuerden also nur der Codedokumentation dienen. Wie ich gerade sehe ist 'hh' nicht mal ganz richtig implementiert, da '%hhd' auf 1024 angewendet immer noch 1024 ausgibt (und nicht das auf char gecastete, i.e. 0).
Was sagen die Experten?
Man vergesse dass es 'h' und 'hh' gibt, waere glaube ich ein vernuenftiger Rat. Ciao, Micha.