Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Exercice de style (inutile)

4 réponses
Avatar
Pierre Maurette
Bonsoir,

A partir de ce code:

#include <stdio.h>

static char* types[] = {"char"
, "char*"
, "int"
, "double"
};
const int nb_types = (sizeof types) / (sizeof types[0]);

int main(void)
{
int i;
for(i = 0; i < nb_types; i++)
{
printf("%s\n", types[i]);
}
return 0;
}

le but serait d'ajouter l'affichage du sizeof pour chaque type, en
n'ayant qu'à modifier le tableau types[] pour ajouter/retrancher des
types.

Ça me semble impossible, à cause entre autre de la faiblesse du
préprocesseur C, alors que ce serait sans doute faisable (sans être
évident) avec par exemple MASM.

Que voyez-vous comme solution la plus approchante, sans utiliser
d'outil (processeur texte) externe ?


Bien entendu, la solution pragmatique est dans le copier-coller de
lignes de printf():

#include <stdio.h>

int main(void)
{
printf("sizeof(%s)\t == %u\n", "char", sizeof(char));
printf("sizeof(%s)\t == %u\n", "int", sizeof(int));
printf("sizeof(%s)\t == %u\n", "double", sizeof(double));
return 0;
}

--
Pierre Maurette

4 réponses

Avatar
Emmanuel Delahaye
le but serait d'ajouter l'affichage du sizeof pour chaque type, en
n'ayant qu'à modifier le tableau types[] pour ajouter/retrancher des types.


#include <stdio.h>

int main(void)
{
#define ITEM(T)
printf ("sizeof %-10s = %un", #T, sizeof (T));
#include "types.itm"
#undef ITEM

return 0;
}

avec

/* types.itm */

ITEM (char)
ITEM (char*)
ITEM (int)
ITEM (double)

Ca donne :

sizeof char = 1
sizeof char* = 4
sizeof int = 4
sizeof double = 8

vielle astuce glanée sur c.l.c. et utilisée à outrance dans mon code
(j'aime bien faire bosser la machine à ma place...)

http://mapage.noos.fr/emdel/clib.htm

--
A+

Emmanuel Delahaye

Avatar
Emmanuel Delahaye
le but serait d'ajouter l'affichage du sizeof pour chaque type, en
n'ayant qu'à modifier le tableau types[] pour ajouter/retrancher des types.


#include <stdio.h>

int main(void)
{
#define ITEM(T)
printf ("sizeof %-10s = %un", #T, sizeof (T));
#include "types.itm"
#undef ITEM

return 0;
}

avec

/* types.itm */

ITEM (char)
ITEM (char*)
ITEM (int)
ITEM (double)

Ca donne :

sizeof char = 1
sizeof char* = 4
sizeof int = 4
sizeof double = 8

vieille astuce glanée sur c.l.c. et utilisée à outrance dans mon code
(j'aime bien faire bosser la machine à ma place...)

http://mapage.noos.fr/emdel/clib.htm

--
A+

Emmanuel Delahaye

Avatar
Pierre Maurette
[bravo !]
Bien ... Je pensais à toi en posant la question, et il me semblait me
souvenir d'un autre truc que j'avais omis de noter ;-)

--
Pierre Maurette
Avatar
Antoine Leca
Emmanuel Delahaye wrote:
#define ITEM(T)
printf ("sizeof %-10s = %un", #T, sizeof (T));
#include "types.itm"


OK, tu m'as grillé sur le fil.


Antoine