Limite superieure d'un size_t
Bonsoir,
Dans un petit programme que je développe, j'ai besoin d'une file de priorité minimale. J'ai choisi de l'implémenter sous forme de tas-min, de la même façon que dans Introduction à l'algorithmique. Mon problème est dans l'implémentation de l'opération insérer.
Afin de mettre les choses dans leur contexte, voici l'algorithme ... :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
Fonction : inserer(f : file-min, e : element)
Paramètres : f la file à modifier, et e l'élément à insérer dans la file.
Insère e dans f.
DEBUT
| /* ajout d'une nouvelle feuille, avec la clef la plus grand possible. */
| taille[f] <- taille[f] + 1
| f[taille[f]] <- +INF
| /* on réduit la clef de l'élément, pour qu'il trouve sa place dans le tas */
| reduire-clef(f, taille[f], clef[e])
FIN |
... et l'implémentation :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
err_e fileMin_inserer(fileMin_s *f, arbre_s *a)
{
err_e res = ERR_TAILLE;
if (f->taille < FILEMIN_CAPACITE_MAX)
{
size_t nbocc = a->e.nbocc;
a->e.nbocc = ULONG_MAX; /* FIXME */
f->taille++;
f->file[f->taille] = a;
fileMin_reduireClef(f, f->taille, nbocc);
res = ERR_OK;
}
return res;
} |
Le problème se situe à la 9-ième ligne, marquée d'un FIXME.
Le champ nbocc, de type size_t doit prendre la plus grande valeur possible. Hors la norme ISO C90 ne définit ce type que comme un entier non signé, résultat de l'opérateur sizeof.
Il n'y a aucune garantie que size_t soit un typedef d'unsigned long, je m'avance donc un petit peu trop en lui affectant ULONG_MAX.
Ma question est donc : comment obtenir la limite superieure d'un size_t sur la machine qui compile ?
Merci d'avance.