Oui, en fait, à un moment j'avais pris l'habitude d'écrire des
ou des choses du genre pour initialiser des tableaux (généralement d'int, parfois d'unsigned short)
L'exemple que je cite plus haut est extrème (mais bien réel malheureusement). Il s'agit d'un module de 150 lignes de C qui implémente un décodeur arithmétique (c'est à dire une série de fonctions qui lisent des données compactées par codage arithmétique).
L'interface du module ressemblait donc à cela :
void decode_var(int nind,int *res,unsigned char *ptr)
nind étant le nombre de données à décoder, res un tableau destiné à recevoir les données (pré-alloué), et ptr un pointeur du le début des données codées.
Or, il y avait à la fin un gestionnaire de cas particulier qui, soit en cas d'erreur de lecture, soit pour une certaine valeur de l'entête des données d'entrée, renvoyait un tableau initialisé par une constante. Implémenté comme
else fill_n(res,nind,vdef);
C'était le seul appel à la STL, avec donc un #include <algorithm> en haut du fichier...
Cet appel (remplacé maintenant par un bête for(int i=0;i<nind;i++) res[i]=vdef
se traduisait par un triplement de la taille de l'obj compilé (qui passait en mode optimisé, de 2 à 7k), rien de dramatique à l'échelle du programme, mais tout à fait exemplaire, je crois...
Francois
Partager