[gull] Subtilité de C n° 2 : type de retour de malloc

Leopoldo Ghielmetti leopoldo.ghielmetti at a3.epfl.ch
Thu Apr 3 21:59:25 CEST 2008


On Thu, 2008-04-03 at 18:03 +0200, Daniel Cordey wrote:
> 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;

typedef struct toto toto;
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

ciao, Leo




More information about the gull mailing list