J'aimerais connaître la valeur maximale de size_t sur le système sur lequel mon programme est exécuté ..__ Mon premier instinct a été d'utiliser la valeur négative 1, comme suit:
size_t max_size = (size_t)-1;
Mais je suppose qu'il existe un meilleur moyen ou une constante définie quelque part.
Une constante de manifeste (une macro) existe dans C99 et elle s'appelle SIZE_MAX
. C89/90 n’a cependant pas cette constante.
Cependant, ce que vous avez dans votre message original est une méthode parfaitement portable pour trouver la valeur maximale de size_t
. Il est garanti de fonctionner avec n'importe quel type non signé.
#define MAZ_SZ (~(size_t)0)
ou SIZE_MAX
La solution size_t max_size = (size_t)-1;
proposée par le PO est certainement la meilleure à ce jour, mais j’ai trouvé une autre façon de procéder, plus compliquée. Je le poste juste pour la curiosité académique.
#include <limits.h>
size_t max_size = ((((size_t)1 << (CHAR_BIT * sizeof(size_t) - 1)) - 1) << 1) + 1;
Au lieu des opérations sur les bits suggérées dans les autres réponses, vous pouvez le faire en C++.
#include <limits>
size_t maxvalue = std::numeric_limits<size_t>::max()
Si vous supposez au moins un compilateur C++ 11, SIZE_MAX devrait être disponible: