[C] code retour négatif

Résolu/Fermé
almor57 Messages postés 17 Date d'inscription mercredi 3 août 2005 Statut Membre Dernière intervention 22 septembre 2005 - 9 sept. 2005 à 17:30
almor57 Messages postés 17 Date d'inscription mercredi 3 août 2005 Statut Membre Dernière intervention 22 septembre 2005 - 13 sept. 2005 à 12:57
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
A voir également:

1 réponse

crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 507
9 sept. 2005 à 17:58
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
mackoncef Messages postés 20 Date d'inscription mercredi 22 juin 2005 Statut Membre Dernière intervention 7 septembre 2006 1
10 sept. 2005 à 17:37
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
almor57 Messages postés 17 Date d'inscription mercredi 3 août 2005 Statut Membre Dernière intervention 22 septembre 2005 > mackoncef Messages postés 20 Date d'inscription mercredi 22 juin 2005 Statut Membre Dernière intervention 7 septembre 2006
13 sept. 2005 à 12:57
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
almor57 Messages postés 17 Date d'inscription mercredi 3 août 2005 Statut Membre Dernière intervention 22 septembre 2005
13 sept. 2005 à 12:51
Exactement ce que je cherchais...

Merci bcp
0