[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