[C] code retour négatif

Résolu
almor57 Messages postés 17 Statut Membre -  
almor57 Messages postés 17 Statut Membre -
Salut

Je cherche un moyen simple de tester en C un code retour qui peut prendre des valeurs positives ou négatives.

Si le pgm appelé retourne une valeur positive ou nulle, le pgm appelant peut utiliser WEXITSTATUS.

Si le pgm appelé retourne une valeur négative, WEXITSTATUS rend le complément à 256.

La seule solution que j'ai trouvée est de faire un test du type :
if (code_retour > 128) code_retour -= 256

Existe-t-il une fonction permettant de transformer aussi bien les codes retour renvoyés négatifs et positifs ?

Merci

1 réponse

  1. crabs Messages postés 909 Statut Membre 507
     
    Salut,
    Une solution sans test => cast en char puis cast en int
     code_retour = (int) ( (char) (WEXITSTATUS(status)) ) ;
    

    Tes codes retour au lieu d'aller de 0 à 255, iront de -128 à 127.
    A+, crabs
    0
    1. mackoncef Messages postés 20 Statut Membre 1
       
      ca ne marche pas toujours et cadépend du compilateur
      fait plutot un
      code_retour = WEXITSTATUS(status) - 128 ;
      c'est bete mais ca marche
      0
      1. almor57 Messages postés 17 Statut Membre > mackoncef Messages postés 20 Statut Membre
         
        Là non plus ça ne marche pas toujours, surtout que je peux avoir aussi avoir des codes retour positifs.

        Mon compilateur est GCC sous Mandrake 10.1.

        Ta soluce est OK pour les codes retour <0 qui reviennent du WEXITSTATUS entre 128 et 255, mais quand ils sont positifs ... ta formule les rend négatifs.

        En améliorant avec un
        if (WEXITSTATUS(status) >= 128)
        cret -= 128;
        on retombe sur ma première solution

        Ce qui m'intéresse, dans ce cas c'est de connaître les compilateurs avec lesquels ça pourrait ne pas marcher. Mon appli est destinée à être distribuée - gratuitement - sur des plate-formes que je ne connais pas à l'avance.

        Merci

        Merci quand même
        0
    2. almor57 Messages postés 17 Statut Membre
       
      Exactement ce que je cherchais...

      Merci bcp
      0