Liefert Posix Formatstring-Makros für printf / scanf?

9

Die Funktionsfamilien printf und scanf in C verbrauchen eine Handvoll primitiver Formatbezeichner, die den grundlegenden Datentypen entsprechen - %d für int , %llu für unsigned long long int usw.

Es gibt jedoch eine große Anzahl standardisierter Aliase, die man in der Praxis verwenden möchte, wie zum Beispiel int32fast_t , und man kann und sollte den zugrunde liegenden fundamentalen Typ nicht kennen müssen. Für die Aliase in stdint.h gibt der C-Standard dankbar eine Reihe von Makros an, um die entsprechenden Formatzeichenfolgen wie PRI32 in inttypes.h zu generieren.

Gibt es einen analogen Satz von Makros für Posix? Posix hat Tonnen von undurchsichtigen Typen wie ssize_t , pid_t , rlim_t , suseconds_t usw., die alle Variationen der grundlegenden intgral Typen sind. Wie kann man diese Typen in Formatzeichenfolgen portabel verwenden?

    
Kerrek SB 30.08.2013, 13:40
quelle

2 Antworten

1

Das sfio-Paket (Teil der Open-Source-AST-Software von AT & amp; T Labs) weist Funktionen analog zu printf und scanf auf, mit denen Sie die Größe des numerischen Werts (typischerweise sizeof() ) als zusätzlichen Parameter angeben können. Einige Beispiele:

%Vor%

USENIX-Papier: Erweiterte Datenformatierung mit Sfio .

    
Mark Plotnick 23.10.2013 22:00
quelle
0

Posix garantiert, dass sys / types.h -Werte ein "arithmetischer Typ mit angemessener Länge" sind und einige weitere als vorzeichenlose oder signierte "erweiterte Länge" angegeben sind. Die einzige akzeptable Möglichkeit, diese auszugeben, wäre, sie über den größten geeigneten Sprachtyp (u) intmax_t zu übertragen und dann auszugeben.

Ihre Eingabe wäre gefährlicher (d. h. nicht standardkonform möglich), da es schwierig wäre, zu garantieren, dass Ihre Konvertierung in den Basistyp nicht übergelaufen ist.

    
caskey 31.08.2013 23:41
quelle

Tags und Links