73 votes

Quelle est une méthode portable pour trouver la valeur maximale de size_t?

J'aimerais connaître la valeur maximale de size_t sur le système exécuté par mon programme. Mon premier instinct a été d'utiliser négatif 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.

69voto

AndreyT Points 139512

Une constante de manifeste (une macro) existe dans C99 et 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é.

14voto

nategoose Points 8011
 #define MAZ_SZ (~(size_t)0)
 

ou SIZE_MAX

4voto

Praetorian Points 47122

La solution size_t max_size = (size_t)-1; suggéré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;
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X