Développement C : PROTO_LIST ???
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Développement C : PROTO_LIST ???



  1. #1
    lignux

    Développement C : PROTO_LIST ???


    ------

    Bonjour,

    J'ai une petite question de programmtion en C. C'est assez technique, et précis, mais j'espère qu'elle a quand même sa place ici


    J'étudie l'algorithme de hashage MD2. On en trouve la définition officielle sur le site de

    l'IETF dans le RFC 1319: http://www.ietf.org/rfc/rfc1319.txt

    Il y a, sur cette page, un exemple d'implémentation en C.

    Je vais énoncer ma question de façon claire et naïve: c'est quoi ce bidule "PROTO_LIST"???

    Je met ci-dessous quelques extraits de code. Sinon, vous pouvez aller voir sur la page du RFC et faire simplement une recherche sur "PROTO_LIST"

    Voici un extrait du fichier MD2.h :

    Code:
    void MD2Init PROTO_LIST ((MD2_CTX *));
    void MD2Update PROTO_LIST
      ((MD2_CTX *, unsigned char *, unsigned int));
    void MD2Final PROTO_LIST ((unsigned char [16], MD2_CTX *));

    Un extrait de MDDRIVER.c :

    Code:
    static void MDString PROTO_LIST ((char *));
    static void MDTimeTrial PROTO_LIST ((void));
    static void MDTestSuite PROTO_LIST ((void));
    static void MDFile PROTO_LIST ((char *));
    static void MDFilter PROTO_LIST ((void));
    static void MDPrint PROTO_LIST ((unsigned char [16]));
    Et pour info, voici le fichier GLOBAL.h :
    Code:
    /* GLOBAL.H - RSAREF types and constants
     */
    
    /* PROTOTYPES should be set to one if and only if the compiler supports
         function argument prototyping.
       The following makes PROTOTYPES default to 0 if it has not already
         been defined with C compiler flags.
     */
    
    #ifndef PROTOTYPES
    #define PROTOTYPES 0
    #endif
    
    /* POINTER defines a generic pointer type */
    typedef unsigned char *POINTER;
    
    /* UINT2 defines a two byte word */
    typedef unsigned short int UINT2;
    
    /* UINT4 defines a four byte word */
    typedef unsigned long int UINT4;
    
    /* PROTO_LIST is defined depending on how PROTOTYPES is defined above.
       If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it
         returns an empty list.
     */
    #if PROTOTYPES
    #define PROTO_LIST(list) list
    #else
    #define PROTO_LIST(list) ()
    #endif
    Et un tout grand merci d'avance à qui peut m'aider!!!

    -----
    Good Night, and Good Luck!

  2. #2
    Jean_Luc

    Re : Développement C : PROTO_LIST ???

    Salut,

    Si dans ton programe avant d'inclure GLOBAL.h et MD2.h, tu definis PROTOTYPES à 1 (#define PROTOTYPES 1) alors les fonctions de MD2.h seront déclarées avec leur interface complète:
    ex: la fonction MD2Init sera déclarée comme ça:
    void MD2Init(MD2_CTX *);
    si tu fais rien, la fonction MD2Init sera déclarée comme ça:
    void MD2Init();

    Je te conseille vivement de definir PROTOTYPES à 1. Ca t'évitera d'éventuel bug.
    L'Univers est fini. Ah bon déjà ?

  3. #3
    lignux

    Re : Développement C : PROTO_LIST ???

    Ok, merci. Je comprends un peu mieux... mais ça reste un peu flou.

    "PROTO_LIST", et "list" sont-ils des mots réservés? Je ne le pense pas. Dans ce cas, comment se fait-il que le compilateur interprète le code de cette manière.

    De quoi s'agit-il? Est-ce du "prototypage d'arguments"? Connaissez-vous une source (sur internet de préférence) qui explique ceci?

    Pourriez-vous m'expliquer plus en détails le sens de ce bloc:

    Code:
    #if PROTOTYPES
    #define PROTO_LIST(list) list
    #else
    #define PROTO_LIST(list) ()
    #endif
    Encore une fois, merci beaucoup! Je désespérais de trouver une explication...
    Good Night, and Good Luck!

  4. #4
    lignux

    Re : Développement C : PROTO_LIST ???

    Ah non ça va, je crois que j'ai capté cette fois.

    Si PROTOTYPES = 1, alors le compilateur va remplacer "PROTO_LIST(blablabla)" par "blablabla" (=> d'où les doubles parenthèses dans la déclaration des fonctions)

    et si PROTOTYPES = 0, alors il remplacera "PROTO_LIST(blablabla)" par ().

    Tout simplement.

    Faut avouer que cet espèce de langage de précompilation n'est pas toujours très clair, non?
    Good Night, and Good Luck!

  5. A voir en vidéo sur Futura
  6. #5
    Jean_Luc

    Re : Développement C : PROTO_LIST ???

    Si PROTOTYPES = 1, alors le compilateur va remplacer "PROTO_LIST(blablabla)" par "blablabla" (=> d'où les doubles parenthèses dans la déclaration des fonctions)

    et si PROTOTYPES = 0, alors il remplacera "PROTO_LIST(blablabla)" par ().

    Tout simplement.
    C'est exatement ça.
    On appelle ça une macro.

    Faut avouer que cet espèce de langage de précompilation n'est pas toujours très clair, non?
    Tout a fait d'accord.
    Des fois on s'arrache les cheveux

    Sur ce
    L'Univers est fini. Ah bon déjà ?

Discussions similaires

  1. Développement
    Par MS.11 dans le forum Mathématiques du collège et du lycée
    Réponses: 2
    Dernier message: 14/10/2007, 21h59
  2. Développement
    Par Rammstein43 dans le forum Mathématiques du collège et du lycée
    Réponses: 6
    Dernier message: 15/09/2007, 09h26
  3. developpement
    Par invitedebffe3e dans le forum Mathématiques du collège et du lycée
    Réponses: 4
    Dernier message: 25/09/2006, 22h18
  4. Developpement
    Par inviteb86e8d03 dans le forum Biologie
    Réponses: 9
    Dernier message: 24/03/2006, 17h35
  5. développement de (1+ix)^n
    Par invite776a26e4 dans le forum Mathématiques du supérieur
    Réponses: 12
    Dernier message: 02/10/2005, 11h30
Découvrez nos comparatifs produits sur l'informatique et les technologies.