[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