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 :

avertissement passage d'argument


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 106
    Par défaut avertissement passage d'argument
    Bonjour à tous,

    Je code actuellement sur stm32 en C . Afin de gérer un écran j'utilise des fonctions et depuis le début je m'obstine à n'avoir aucun avertissement par le compilateur.

    Sauf que la je n'arrive pas résoudre ce cas de figure précis, certainement par manque de connaissance de ma part.

    Je souhaite dessiner un triangle, pour se faire j'utilise une fonction qui accepte ceci en argument:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void ili9341_Draw_Filled_Shape(uint8_t corners, const int16_t *xArray, const int16_t *yArray, int16_t x, int16_t y, colour_t colour)
    {
    --code
    }
    Dans mon main j'appelle donc cette fonction avec ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	uint16_t xArray_UP[3]={0,20,10};
    	uint16_t yArray_UP[3]={10,10,0};
    ili9341_Draw_Filled_Shape(3, xArray_UP, yArray_UP, 187, 40, ORANGE);
    Le compilateur me souligne la fonction pour me signaler un problème, même si ce code compile bien, et fonctionne parfaitement.
    Je souhaiterais comprendre et résoudre cette erreur.

    Voici l'erreur indiquée:
    pointer targets in passing argument 2 of 'ili9341_Draw_Filled_Shape' differ in signedness [-Wpointer-sign]
    J'ai éssayé de caster mais sans succès.

    Merci de m'avoir lu

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 145
    Billets dans le blog
    4
    Par défaut
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void ili9341_Draw_Filled_Shape(uint8_t corners, const int16_t *xArray
    
    uint16_t xArray_UP
    ili9341_Draw_Filled_Shape(3, xArray_UP

    Même chose pour le troisième paramètre.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 106
    Par défaut
    Olalala !! LA hnote.

    Un gros merci, je l'avais au milieu de la figure. C'"st au pied du mur qu'on voit moins le mur !

    Désolé du dérangement et encore merci

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 492
    Billets dans le blog
    1
    Par défaut
    depuis le début je m'obstine à n'avoir aucun avertissement par le compilateur.
    Et c'est une bonne idée. Un warning, comme son nom l'indique, mérite ton attention. En C, un warning indique souvent un problème qui finira par te causer des soucis.

    Dans ton exemple, ça se passe bien car les valeurs utilisées sont correctement représentées en uint16 et en int16. Si tu utilises des grandes valeurs en entrée (c'est peu probable, ton écran ne fait pas non plus des milliers de pixels de large) avec tes uint16, ta fonction les interprètera comme des nombres négatifs.

    Exemple :

    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
    #include <stdint.h>
    #include <stdio.h>
     
    void draw(const int16_t* array, size_t length) {
    	for (size_t i = 0; i < length; i++) {
    		printf("%d ", array[i]);
    	}
    	putchar('\n');
    }
     
    int main(void) {
    	uint16_t array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    	draw(array, sizeof(array) / sizeof(array[0]));
     
    	uint16_t array2[] = {10000, 20000, 30000, 40000, 50000, 60000};
    	draw(array2, sizeof(array2) / sizeof(array2[0]));
    }
    Ca affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1 2 3 4 5 6 7 8 9 10 
    10000 20000 30000 -25536 -15536 -5536
    Si tu rajoutes un u dans le prototype de ta fonction pour avoir void draw(const uint16_t* array, size_t length), alors l'affichage est correct pour les 2 appels.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. passage d'argument sur l'imprimante
    Par linux dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 07/10/2005, 16h25
  2. [JAVASCRIPT] passage d'argument à une fonction
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/06/2005, 18h17
  3. [TASM] Passage d'argument à une macro
    Par sorry60 dans le forum Assembleur
    Réponses: 13
    Dernier message: 23/04/2005, 18h22
  4. [web] passage d'arguments à un CGI
    Par ma2th dans le forum Web
    Réponses: 4
    Dernier message: 20/08/2004, 12h18
  5. passage d'argument à la procédure main ()
    Par Zazeglu dans le forum C
    Réponses: 5
    Dernier message: 01/09/2003, 19h59

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