ANSI struct question

tatouille

Membre expert
1 Juin 2004
5 174
493
Stanford CA
Bloc de code:
struct some_struct{
    u_char   some_struct_len;
    u_short  some_struct_index;
    u_char   some_struct_type;
  
};

/* implementation */

static struct some_struct
*my_struct(int s, char **b)
{
    /**/

   return NULL;
}
est-t -il admis de retourner NULL par defaut pour une structure
ou bien une taille serait t'il plus appropriée ?
size_t 0;

?

ca fonctionne et je n'ai pas de probleme c'est juste que je n'ai pas trouvé
de chapitre abordant la question pour le standard ANSI

donc si quelqu'un a des pistes , des liens ?

la regle commune est à un type donné je retourne le type déclaré

mais dans le cas d'une struct qui ne retourne rien mais qui n'est pas un type void
doit retourner une valeur par defaut

mais ce type contient plusieurs types



:D bon je sais c'est un dilemme de psychopate

du code un jour j'irais me faire soigné :D
 
Dans ton cas, tu retournes un pointeur, donc

return (struct some_struct*) NULL;

Par contre si tu fais:
Bloc de code:
MaStruct maStruct;


main()
{
 maStruct=NULL  // ?? ça fait quoi ??
}

J'ai eu à faire ce genre de trucs avec des Movie Quicktime qui sont des structures:
Bloc de code:
if(movie2!=NULL)
		{
		nextLivePath=livePath1;
		currLivePath=livePath2;
		playMovie=&movie2;
		nextMovie=&movie1;
		}
  ....
 movie1=NULL;

Ca marche sans problème, je me demande juste ce que ça fait exactement movie1=NULL ?

Ca met toutes les données de la structure à zéro ?
 
MaStruct maStruct;


main()
{
maStruct=NULL // ?? ça fait quoi ??
}

Ne veut rien dire, car maStruct n'est pas un pointeur. A moins que tu n'ait defini MaStruct comme un pointeur.

Je vous conseille de mettre dans le nom du type sa signification par exemple :

typedef struct
{
long a;
long b;
} MyStruct,*MyStructPtr,**MyStructHandle;

Dans le source vous verrez immediatement si vous faites reference a une structure ou a une adresse de structure.

Cordialement
 
dans mon cas c'est un pointeur

mpergand, on peut initialiser un pointeur de structure à 0;
Bloc de code:
const struct afswtch *afp = 0;
c'est le cas commun car lorsque tu declares deux pointeurs
sur la meme structure pour les comparer ( cas d'une socket in/out )
ce qui t'interresse pour le test c'est en premier le sizeof

mpergand, on peut initialiser une structure à NULL;
aucun problème

dans mon cas c'est un pointeur de structure qui ne retourne rien mais une valeur par defaut
car ce qui m'interresse c'est le **buffer ( retry-loop inside the struct :) )

après quelques recherche sur le net l'usage semble être
return (NULL);

mais es-ce que cet usage correspond à la norme ?
je n'ai pas trouvé

mais l'usage est logique et gcc est satisfait (ansi flag)
:zen:
 
Didier Guillion a dit:
MaStruct maStruct;


main()
{
maStruct=NULL // ?? ça fait quoi ??
}

Ne veut rien dire, car maStruct n'est pas un pointeur. A moins que tu n'ait defini MaStruct comme un pointeur.

Cordialement


Ca ne veux rien dire effectivement, ce qui m'a trompé, c'est que je pensais que les Movie Quicktime étaient des structures, mais ce n'est pas le cas:

typedef struct MovieType** Movie;

Voila, tout s'explique :)