wake-up-neo.net

Was ist eine tragbare Methode, um den Maximalwert von size_t zu ermitteln?

Ich möchte gerne wissen, wie groß size_t auf dem System ist, auf dem mein Programm läuft ..__ Mein erster Instinkt war, negative 1 zu verwenden, wie folgt:

size_t max_size = (size_t)-1;

Aber ich vermute, es gibt einen besseren Weg oder eine irgendwo definierte Konstante.

67
Justicle

Eine Manifestkonstante (ein Makro) ist in C99 vorhanden und heißt SIZE_MAX. In C89/90 gibt es jedoch keine solche Konstante.

Was Sie jedoch in Ihrem ursprünglichen Beitrag haben, ist eine perfekt tragbare Methode, um den Maximalwert von size_t zu ermitteln. Es ist garantiert, mit jedem vorzeichenlosen Typ zu arbeiten.

65
AnT
#define MAZ_SZ (~(size_t)0)

oder SIZE_MAX

14
nategoose

Die vom OP vorgeschlagene Lösung size_t max_size = (size_t)-1; ist definitiv die beste bisher, aber ich habe einen anderen, komplizierteren Weg gefunden, dies zu tun. Ich poste es nur aus akademischer Neugier.

#include <limits.h>

size_t max_size = ((((size_t)1 << (CHAR_BIT * sizeof(size_t) - 1)) - 1) << 1) + 1;
4
Praetorian

Als Alternative zu den in den anderen Antworten vorgeschlagenen Bitoperationen können Sie dies in C++ tun 

#include <limits>
size_t maxvalue = std::numeric_limits<size_t>::max()
4
kalmiya

Wenn Sie mindestens einen C++ 11-Compiler annehmen, sollte Ihnen SIZE_MAX zur Verfügung stehen:

http://en.cppreference.com/w/c/types/limits

0
Shital Shah