2013-12-12 8 views
29

Ich bin derzeit eine explizite Umwandlung zu lange und unter Verwendung von %ldpid_t zum Drucken gibt es einen Spezifizierer wie %z für size_t für pid_t?Was ist die richtigen printf Spezifizierer für pid_t Druck

Wenn nicht, was ist der beste Weg zum Drucken pid_t?

+1

Ich bekomme. % d hallo.c: 9: 42: Warnung: Format gibt Typ 'lang' aber das Argument hat Typ 'pid_t' (aka 'int') [-W Format] wenn ich versuche, ld –

+0

@KorayTugay Beachten Sie die obigen Wörter: "Ich verwende derzeit eine explizite Besetzung zu lang". –

Antwort

14

Es gibt keinen solchen Spezifizierer. Ich denke, was du machst ist in Ordnung ... du könntest einen noch breiteren Int-Typ verwenden, aber es gibt keine Implementierung, bei der pid_t größer als lang ist und wahrscheinlich nie sein wird.

+0

Schön. Wenn Sie 'printf' mit Ihrer eigenen Spezifikation für' pid_t' anpassen möchten, besuchen Sie diese Seite: http://stackoverflow.com/questions/9260170/is-this-possible-to-customize-printf –

+0

Ist die Summe Anzahl der Prozesse in Bezug auf wie Bits das os ist? Kann ein OS beispielsweise mehr sizeof (int) haben? –

+0

Siehe http://stackoverflow.com/questions/1922761/size-of-pid-t-uid-t-gid-t-on-linux ... pid_t ist normalerweise 32 Bit, unabhängig von der Bitgröße des Betriebssystems. Ein System * könnte größere haben, aber das hätte ich nicht erwartet. In jedem Fall wird lange genug für die Sicherheit sein. –

2

Bei Integer-Typen, denen ein passender Formatbezeichner fehlt, wie im Fall pid_t, jedoch mit bekannter Zeichnungszahl, auf den am besten übereinstimmenden Typ mit Vorzeichen konvertieren und drucken. Wenn die Signifikanz nicht bekannt ist, konvertieren Sie in den größten unsignierten Typ.

// C99 
#include <stdint.h> 

pid_t pid = foo(); 
printf("pid = %jd\n", (intmax_t) pid); 

// pre-C99 
pid_t pid = foo(); 
printf("pid = %ld\n", (long) pid); 
Verwandte Themen