[gull] Subtilité de C n° 3 : l'opérateur sizeof
Marc Mongenet
marc at mongenet.ch
Thu Apr 3 23:34:37 CEST 2008
Bonjour,
Pour rendre les choses plus concrêtes et permettre
les expérimentations, je présente cette subtilité sous
forme de quizz sur de petites sources.
Introduction f1 :
Malgré son apparence, sizeof n'est pas une fonction
mais un opérateur, et aussi un mot clé de C. La valeur
de sizeof est donc calculée à la compilation.
L'opérande de sizeof peut être un type entre parenthèses
ou une expression.
Fichier f1.c :
------
#include <stdlib.h>
int i = sizeof(int);
int j = sizeof i;
int k = sizeof 22;
char *pc = malloc(1);
------
marc> gcc -c f1.c
Que me dit le compilateur et pourquoi ?
Introduction f2 :
L'opérateur sizeof n'évalue pas son opérande.
Fichier f2.c :
------
#include <stdio.h>
int main() {
char *p = 0;
printf("%u\n", (unsigned)sizeof(*p='a'));
return 0;
}
------
marc> gcc f2.c
marc> ./a.out
Que me dit a.out ?
Introduction f3 :
L'opérateur sizeof travaille sur le type de son opérande,
et ne peut donc pas être utilisé par le pré-processeur
car ce dernier ne parse pas les types.
Fichier f3.c
------
#if sizeof(int) == 4
#define SIZEINT 4
#else
#define SIZEINT (-1)
#endif
const int i = SIZEINT;
------
marc> gcc -c f3.c
Que me dit le compilateur ?
--
Marc Mongenet
Creator of the Web 2 Markup Language
http://w2ml.com
More information about the gull
mailing list