web-dev-qa-db-fra.com

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 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.

67
Justicle

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é.

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

ou SIZE_MAX

14
nategoose

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;
4
Praetorian

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()
4
kalmiya

Si vous supposez au moins un compilateur C++ 11, SIZE_MAX devrait être disponible:

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

0
Shital Shah