Les définitions de types

Prototype


Rappels

  • Un tableau est un aggrégat d’éléments de même type ; une {\tt struct} est un aggrégat\footnote{Mammeri M. {\it programmation} {\sc ecole centrale de paris} {\tiny 1997-1998} p. 112} d’éléments de type (presque) arbitraire. Par exemple :
     
    struct client
    {
        char * nom       ;
        int    telephone ;
        float  solde     ;
    } ;
    
  • Les types de données abstraits font un grand usage de structures et notamment de la structure MAILLON\footnote{{\it ibid}. p. 88}.
  • Différentes méthodes sont utilisées pour renseigner les éléments d’une structure :
     
    /* Designee par un nom */
    struct client   lambda  ;
    /* Designee par une adresse */
    struct client * plambda ;
     
    /* Un nom, donc un point */
    lambda.nom   = "Tournesol" ;
    /* Une adresse, donc une fleche */
    plambda->nom = "Hadock"    ;
    
    Ou comme pour les tableaux, au moment de l’instanciation :
      
    struct client lambda =
        {"Milou", 1244, 5.0} ;
    
  • Les objets de type structure peuvent être affectés, passés en argument et renvoyés comme résultat d’une fonction. Par exemple :
      
    typedef struct client Client ;
    Client lambda ;
    
    Client Precedent (Client suivant)
    {
        Client anterieur = lambda  ;
    		   lambda    = suivant ;
    		   return anterieur ;
    } 
    
  • La comparaison des structures n’est pas possible en langage C.
  • La taille d’un objet de type structure n’est pas nécessairement la somme de la taille de chacun de ses membres. En effet, de nombreuses machines exigent que les objets de certains types soient alloués sur des frontières dépendantes de l’architecture. Cette contrainte implique l’obligation d’utiliser {\tt sizeof} et de ne pas coder la taille de la structure {\it en dur}.
  • Le nom d’un type devient utilisable immédiatement après avoir été rencontré et non pas juste après la fin de la déclaration. Par exemple :
     
    struct MAILLON
    {
        TypDon           donn ;
        struct MAILLON * suiv ;
    } ;
    
    Pour permettre à deux structures de se référencer mutuellement, il est possible de leur donner préalablement un nom. Par exemple :
      
    struct un ; /* Definie ulterieurement */
    
    struct deux
    {
        struct un   * p ;
        struct deux * q ;
    } ;
    
    struct un 
    {
        struct deux * r ;
    } ;
    
    Sans la première déclaration de struct un, la déclaration de deux aurait provoqué une erreur de syntaxe.
  • Deux types de structures sont différentes même s’ils ont les mêmes membres. Par exemple :
      
    struct s1 { int a ; } ;
    struct s2 { int a ; } ;
    
    struct s1 x ;
    struct s2 y = x ; /* erreur */
    
Les définitions de types