Was ist das unsignierte Pendant von ptrdiff_t?

8

Was ist das unsignierte Pendant von ptrdiff_t? Und ähnlich - was ist das signierte Gegenstück von size_t?

Was ich versuche zu erreichen, ist ein vorzeichenloser Typ, mit dem ich die positiven Werte der Variablen ptrdiff_t speichern kann, ohne mich um große Werte kümmern zu müssen - das scheint size_t zu sein.

Umgekehrt - Ich hätte gerne einen signierten Typ, bei dem ich die Werte von size_t speichern kann, wiederum ohne mich um große Werte zu kümmern.

    
Bartłomiej Siwek 01.05.2012, 13:31
quelle

2 Antworten

8

Ich glaube nicht, dass es ein formales unsigniertes Gegenstück zu ptrdiff_t (nein uptrdiff_t ) gibt, aber die Verwendung von size_t ist ziemlich vernünftig.

In POSIX ist das signierte Gegenstück zu size_t ssize_t . Es ist der Typ, der von Funktionen wie read() zurückgegeben wird, zum Beispiel.

Dies deutet darauf hin, dass es nur wenige Implementierungen geben wird, bei denen der zugrundeliegende Typ von ssize_t und ptrdiff_t unterschiedlich sein wird.

    
Jonathan Leffler 01.05.2012, 13:38
quelle
4

size_t wird verwendet, um Objektgrößen darzustellen. Es wurde allgemein angenommen, dass Compiler-Autoren keine Objekte mit negativen Größen erstellen werden.

Beachten Sie, dass Sie mit ptrdiff_t 'die Differenz abhängig davon erhalten, wie Sie vergleichen, so dass ein signierter Typ sinnvoll ist (das Ändern in einen vorzeichenlosen Typ für vernünftige Werte ist trivial):

  

5.7 Zusatzoperatoren

     

6 [...] Wie bei jedem anderen arithmetischen Überlauf ist das Verhalten nicht definiert, wenn das Ergebnis nicht in den angegebenen Bereich passt. [...]

Sie müssen möglicherweise einen speziellen Typ für "sehr große Werte" erstellen.

    
dirkgently 01.05.2012 13:38
quelle

Tags und Links