• # Constante invalide

    Posté par . En réponse au journal Parlons C, parlons pipe !. Évalué à 10.

     if(f->count>0) return 0xEB; /* mes initiales \o/ */
    
    

    Moi, je lis « Enormous Boobs ». C'est sexiste ! Je te demande de changer de constante.

    unsigned char sf_pop(SmallFifo * f)
    {
     if(f==NULL) return 0x00;
     /* Pas tomber trop bas */
     if(f->count>0) f->count--;
     return (unsigned char)(f->data>>(8 * f->count)) & 0xFF;
    }
    
    

    Quand tu fais ceci, tu récupères l'octet situé à la position « count », mais tu n'effaces pas le contenu de « data », et tu ne tiens pas compte du fait non plus que ta file peut être vide (sauf pour la gestion de « count »). Ça veut dire d'une part que si tu continues à dépiler une file vide, tu vas obtenir à chaque fois la dernière valeur dépilée qui peut être non nulle.

    Puisque tu utilises déjà des opérateurs de décalage sur des registres du même format, pourquoi ne t'en sers-tu pas pour décaler directement le contenu de ta file ?

    data >>=8;
    return data & 0xff;