IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Compréhension de syntaxe C


Sujet :

C

  1. #1
    P.G
    P.G est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 158
    Par défaut Compréhension de syntaxe C
    Bonjour à tous,

    Je suis peu habitué au c aussi en analysant la fonction ci-dessous

    je vois cette ligne de code :

    pos = (uint32)offset%512;

    que signifie (uint512) pour moi je l'interprète comme un forçage du type de résultat de offset % 512 en uint32,

    mais à quoi cela sert-il car pos est de type uint32 ?

    Merci beaucoup pour votre aide.

    P.G

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    /**
      * @brief  Function fetches data from microSD card and stores in External Buffer.
      * @param  offset : Data offset in resource file.
      * @param  count  : Number bytes that should be read.
      * @param  num    : (Pointer) Number of bytes that are actually read from microSD.
      * @return Pointer to External Data Buffer where read data is stored.
      */
    uint8* TFT_Get_Data(uint32 offset, uint32 count, uint32 *num) {
        uint32 pos = 0;
     
        FS_FSeek(pFile, offset, FS_SEEK_SET);
     
        pos = (uint32)offset%512;
     
        if (count <= 512) {
            *num = FS_Read(pFile, Ext_Data_Buffer, count);
        }  
        else {
            FS_Read(pFile, Ext_Data_Buffer, 512);
            *num = 512-pos;
        }
     
        return Ext_Data_Buffer;
    }

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 049
    Par défaut
    Je suis très fatigué, mais à priori dans ton code je ne vois strictement aucun intérêt de ce cast.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par P.G Voir le message
    je vois cette ligne de code :

    pos = (uint32)offset%512;

    que signifie (uint512) pour moi je l'interprète comme un forçage du type de résultat de offset % 512 en uint32,

    mais à quoi cela sert-il car pos est de type uint32 ?
    Bonjour

    Je suis un peu rouillé en ce qui concerne les priorités des opérateurs aussi je ne sais plus trop si le cast s'applique à "offset" ou à l'opération "offset%512" mais quoi qu'il en soit, tu as raison, le cast est inutile car les variables sont déjà du type casté.

    Ceci dit cela n'est pas inhabituel de voir ce genre de cast. Peut-être que l'auteur ait voulu indiquer aux lecteurs éventuels du code qu'il était important de travailler en uint512...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre très actif

    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 582
    Par défaut
    L’opérateur modulo (%) renvoie un int.

    Un int est différent d'un uint32.

    Ce cast est nécessaire lorsque l'on compile avec -Wconversion en option du compilateur (gcc)

  5. #5
    Membre éprouvé

    Homme Profil pro
    autodidacte
    Inscrit en
    Mars 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : autodidacte

    Informations forums :
    Inscription : Mars 2011
    Messages : 95
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    je ne sais plus trop si le cast s'applique à "offset" ou à l'opération "offset%512"
    Le cast a une priorité plus élevée que % et les 4 opérateurs arithmétiques.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mith06 Voir le message
    L’opérateur modulo (%) renvoie un int.

    Un int est différent d'un uint32.
    Pourtant une opération se fait toujours dans le type le plus large des opérandes entrant dans le calcul non ? En plus le cast est appliqué à la variable offset et non à l'opération renvoyée par offset%512 (merci à lautrec1 de la précision )
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Compréhension de syntaxe VBA acces
    Par mezmerize dans le forum Access
    Réponses: 2
    Dernier message: 15/05/2014, 11h35
  2. pb de compréhension de syntaxe
    Par gedeon3 dans le forum Débuter
    Réponses: 3
    Dernier message: 11/09/2008, 14h17
  3. problèmes de compréhension de syntaxes
    Par kitch18 dans le forum Langage
    Réponses: 2
    Dernier message: 21/01/2008, 09h43
  4. [SQL/ACCESS/VBA]problème de compréhension de syntaxe
    Par satch24 dans le forum VBA Access
    Réponses: 5
    Dernier message: 22/06/2007, 16h18
  5. Compréhension de syntaxe
    Par dzincou dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 13/06/2007, 11h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo