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.
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.
#define MAZ_SZ (~(size_t)0)
oder SIZE_MAX
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;
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()
Wenn Sie mindestens einen C++ 11-Compiler annehmen, sollte Ihnen SIZE_MAX zur Verfügung stehen: