Traduction du mot Type Enregistrement en C

slouma -  
Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

si j'ai dans un énoncé la ligne suivante :
Type Activite = Enregistrement
comment j’écris sa traduction en C ?
est ce que j’écris
struct Activite
{
........
};

ou bien je doit ecrire :
typedef struct Activite
{
...........
};


3 réponses

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Salut Slouma,

    Lorsque tu déclares une struct en C en faisant
    struct Activite { (...) };
    , tu déclares un type. Dans cet exemple "Activite" est l'étiquette de la struct. Pour déclarer des variables utilisant ce type, tu pourras le faire en écrivant
    struct Activite Programmation;
    ,
    struct Activite
    étant donc le type.

    typedef permet juste de créer un alias sur le type créé
    struct Activite
    , permettant de créer un identifiant de remplacement.

    Par exemple :

    struct Activity {
        char * name;
        int is_professional;
    };
    typedef struct Activity Activity;
    
    int main(void)
    {
        struct Activity programming;
        Activity siesta;
    
        return 0;
    }

    Tu peux aussi déclarer la struct et le typedef en même temps (comme tu semblais vouloir le faire. Il faut alors faire
    typedef struct Etiquette { (...) } NomAlias
    ; et l'étiquette devient facultative.

    Bref, c'est une question de choix personnel, de style.

    Dans ton cas, tu devrais certainement faire comme ton prof te l'a enseigné.

    Cependant, de nombreux programmeurs C préfèrent ne pas abuser des typedef qui masquent la nature réelle de ce qui se cache derrière l'alias.

    C'est par exemple très mal vu dans les directives de style du noyau Linux

    https://www.kernel.org/doc/html/latest/process/coding-style.html#typedefs

    Dal
    0
    1. slouma
       
      merci, j'ai bien compris,
      reste maintenant cette déclaration :

      Type List_Activite = ^ Activite


      est ce que je fais typedef pour traduite le mot Type ?

      ou bien il suffit d'ecrire

      struct Activite *List_Activite ;
      0
  2. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102
     
    Je pense que la conversion est :
    // Type List_Activite = ^ Activite (c'est quel langage, du Pascal?)
    typedef struct Activite *List_Activite;    // ça c'est du C
    
    Ça dit que List_Activite est un alias de pointeur sur Activite. Mais faire un alias sur un pointeur est non recommandé en C car trompeur. Mais d'autres langages l'imposent.
    0