[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
A voir également:

1 réponse

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
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
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
almor57 Messages postés 17 Statut Membre
 
Exactement ce que je cherchais...

Merci bcp
0