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 :

Utilisation de retval


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Par défaut Utilisation de retval
    salut à tous et à toutes ,


    J'utilise retval dans un programme en C , dont le but de retourner la valeur de 2 fonctions si l'une des des fonctiones est appeller .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int Condition ( int donnees , int valeurs )
    {
    retval =0;
     
    /*  Corps de la  fonction  */
     
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int fonction1 ( unsigned char *in , unsigned char *out)
     
    {
     
    /* Corps de la fonction */  
     
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int fonction2 ( int valeur1 ,int valeur2)
     
    {
     
    /*   Corps de la fonction  */
     
    }


    Lorsque je souhaite retourner la valeur la fonction N°1 je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if ( Condition () ) retval  = fonction1 (in,out);
    else  retval = fonction2 ( valeur1, valeur2);
    Le Résultat : j'obtiens le résultat demander de la fonction1 mais pas de la fonction2 .

    Si je mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ( Condition () ) retval  = fonction2 (in,out);
    else  retval = fonction1 ( valeur1, valeur2);
    J'obtiens le résultat de la fonction2 est pas de la fonction1.


    J'ai essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ( Condition () ) retval  = fonction1 (in,out) || fonction2(valeur1,valeur2);

    J'obtiens le résultat de la fonction qui est en premier paramétre (fonction1) .

    Merci pour vos différents conseils et suggéstions .

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 969
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 969
    Par défaut
    Lae,

    Revois ton code.

    Penses-tu que
    appelle ta fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int Condition ( int donnees , int valeurs )
    {...

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Par défaut
    Citation Envoyé par droggo Voir le message
    Lae,

    Revois ton code.

    Penses-tu que
    appelle ta fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int Condition ( int donnees , int valeurs )
    {...

    salut droggo

    Lorsque je souhaite retourner la valeur la fonction N°1 je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
     
    if ( Condition () ) retval  = fonction1 (in,out);
    else  retval = fonction2 ( valeur1, valeur2);

    Le Résultat : j'obtiens le résultat demander de la fonction1 mais pas de la fonction2 .

    Si je mets :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ( Condition () ) retval  = fonction2 (in,out);
    else  retval = fonction1 ( valeur1, valeur2);
    J'obtiens le résultat de la fonction2 est pas de la fonction1.

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 969
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 969
    Par défaut
    Lae,

    L'appel
    ne correspond pas au prototype de ta fonction, ton compilateur doit te prévenir.

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Par défaut
    salut droggo ,

    On va faire trés simple , on supprime la CONDITION .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     retval  = fonction1 (in,out);
     retval = fonction2 ( valeur1, valeur2);
    Je souhaite utiliser RETVAL pour retourner la fonction1 si une condition est réaliser SINON retourner la fonction2 .
    J'obtiens le résultat demander de la fonction1 mais pas de la fonction2 .

    RETVAL est déclarer comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int retval = 0 ;
     
    retval  = fonction1 (in,out);
    retval =  fonction2 ( valeur1, valeur2);
    La Quéstion :


    Comment créer un code qui retourne la fonction 1 si une Condition est réaliser
    SINON utiliser la fonction2 avec RETVAL .

  6. #6
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Tu brouilles les pistes en mettant retval dans la fonction Condition(), alors que tu utilise Condition() à côté de retval. On se dit est-ce qu'il y a de la récursivité dans son truc ?

    Mais bon, passons.

    La façon dont tu le poses enfin me fait donner cette réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(condition())
      retval = fct1();
    else
      retval = fct2();
    si cela ne marche pas comme attendu, c'est que :
    - fct2 retourne la même chose que devrait te retourner fct1, ce qui te fait dire que tu as toujours le résultat de fct1.
    - condition() ne retourne pas ce à quoi tu t'attends.

    Donc tu peux utiliser des variables temporaires, faire des printf, et te lancer dans une petite session de déboguage...

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Par défaut
    Citation Envoyé par valefor Voir le message
    si cela ne marche pas comme attendu, c'est que :
    - fct2 retourne la même chose que devrait te retourner fct1, ce qui te fait dire que tu as toujours le résultat de fct1.
    - condition() ne retourne pas ce à quoi tu t'attends.


    salut valefor ,


    RETVAL : valeur renvoyée à l'appelant qui se trouve dans la fonction .



    les valeurs renvoyées de la fonction1 sont QUASI identiques de la fonction2
    mais y'as 2 PARAMéTRES dans la fonction2 qui ne sont pas dans la fct1 .



    J'ai réecrit le code qui se présente comme suit :

    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
     
    switch ( parametres )
     
    {
      case 1:
      retval = fct1(in,out);
     break;
     
     
    case 2 :
    retavl = fct2( val1, val2);
    break;
    default: break;
     
     
    }

    Ayant trés peu utiliser RETVAL , je voulais savoir quel était la différence entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    RETVAL = 0 ;
     
     
    if RETVAL ==1 ( .......);
    if RETVAL ==2 (......  );
    if RETVAL ==3 (...... );

    Merci pour vos conseils et suggésitons .

  8. #8
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Salut,

    As-tu dans tes fonctions un return ?
    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
    int fonction1(unsigned char *in, unsigned char *out)
    {  int result = 0 ;
     
      /* Corps de la fonction #1 */
      /* Positionner result en fonction de *in et *out */
     
      return result ;  /* Retourner le résultat */
    }
     
    int fonction2(int valeur1, int valeur2)
    {  int result = 0 ;
     
      /* Corps de la fonction #2 */
      /* Positionner result en fonction de valeur1 et valeur2 */
     
      return result ;  /* Retourner le résultat */
    }
    En fonction des tests dans tes fonctions, tu positionnes la valeur de la variable local result et tu la retournes par l'instruction return.
    Puis dans ton code :
    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
    /* Dans le main */
      int retval = 0 ;
     
      if(parametre)
        retval = fonction1(&in, &out) ;
      else
        retval = fonction2(val1, val2) ;
     
      if(retval==0)
      {
        action....
      }
      else if(retval==1)
      {
        action...
      }
      else if(retval==2)
      {
        action...
      }
      else if(retval==3)
      {
        action...
      }
    Citation Envoyé par Marley_T
    Ayant trés peu utiliser RETVAL , je voulais savoir quel était la différence entre
    Entre quoi et quoi ?

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Par défaut
    Citation Envoyé par Elijha Voir le message
    Salut,

    As-tu dans tes fonctions un return ?
    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
    int fonction1(unsigned char *in, unsigned char *out)
    {  int result = 0 ;
     
      /* Corps de la fonction #1 */
      /* Positionner result en fonction de *in et *out */
     
      return result ;  /* Retourner le résultat */
    }
     
    int fonction2(int valeur1, int valeur2)
    {  int result = 0 ;
     
      /* Corps de la fonction #2 */
      /* Positionner result en fonction de valeur1 et valeur2 */
     
      return result ;  /* Retourner le résultat */
    }
    En fonction des tests dans tes fonctions, tu positionnes la valeur de la variable local result et tu la retournes par l'instruction return.
    Puis dans ton code :
    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
    /* Dans le main */
      int retval = 0 ;
     
      if(parametre)
        retval = fonction1(&in, &out) ;
      else
        retval = fonction2(val1, val2) ;
     
      if(retval==0)
      {
        action....
      }
      else if(retval==1)
      {
        action...
      }
      else if(retval==2)
      {
        action...
      }
      else if(retval==3)
      {
        action...
      }
    Entre quoi et quoi ?


    Salut Elijha ;


    Je t'éxplique j'ai 2 fonctions dans un fichier mes_fonctions.c :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    int fonction1(unsigned char *in, unsigned char *out)
    { 
     
      /* Corps de la fonction #1 */
     /*  Pleins de code   */
     
     
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
     
    int fonction2(int valeur1, int valeur2)
    { 
     
      /* Corps de la fonction #1 */
     /*  Pleins de code     */
     
     
    }
    Dans un autre fichier parametres.c j'ai une fonction qui fais appelle à la fonction1 et la fonction 2 dans un switch .

    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
     
     
    int parametres ( int f, int b , int c )
     
    {
    switch ( f )
     
    case 1 :
    retval = fonction1(in,out);
    break;
     
     
    case 2:
    retval = fonction2(valeur1,valeur2);
    break;
     
    default:break;
     
     
          }
     
     
    }


    Citation Envoyé par Elijha Voir le message
    Entre quoi et quoi ?
    Entre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    RETVAL = 0 ; // initialiser retval 
     
     // Quelle différence ? 
     
    if RETVAL ==1 ( .......);
    if RETVAL ==2 (......  );
    if RETVAL ==3 (...... );

Discussions similaires

  1. Petit soucis avec l'utilisation de RETVAL
    Par Olivier Regnier dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 05/04/2007, 17h59
  2. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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