[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