[gull] Subtilité de C n° 2 : type de retour de malloc
Daniel Cordey
dc at mjt.ch
Thu Apr 3 18:03:27 CEST 2008
On Thursday 03 April 2008, Marc Mongenet wrote:
> Je me réponds à moi-même pour complèter mon message
> initial et clore cette subtilité n°2.
> NB : J'utilise gcc-3.3, car gcc 4 a une extension non standard
> qui reconnait malloc comme une fonction builtin, et donne des
> messages d'erreurs particuliers.
Ah, mais j'espere que le malloc utilise est bien celui de la libc... oui ?
> Fichier f3.c (buggué !) :
> ------
> void f() { int *p = (int*)malloc(sizeof *p); }
> ------
Commentaire de nouveau purement semantique (et pseudo-syntaxique)...
utiliser '*p' dans le sizeof, pour l'assignation d'une variable dans
sa "definition", alors que cette "definition" n'est pas "completed"... me
parait limite... C'est peut-etre un cas particulier ou l'assignation
determine la "completion" de la "definition"...
Par contre, comme je ne peux pas definir un element de structure comme etant
un pointeur sur son propre type, je suis oblige d'utiliser 'void *'.
/* marche pas (normal !) */
struct {
struct toto *myself;
...
} toto;
Ceci s'explique puisque la "definition" n'est pas complete avant la reference.
/* marche */
struct {
void *myself; /* et toc :-) */
...
} toto;
Bon, heuresuement que le C nous laisse faire ca... sinon y'aurait pas de
C++ :-)
dc
More information about the gull
mailing list