Rechercher : dans
Par :

[C] code retour négatif

Dernière réponse le 13 sep 2005 à 12:57:55 almor57, le 9 sep 2005 à 17:30:30 
 Signaler ce message aux modérateurs

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

crabs, le 9 sep 2005 à 17:58:24

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 ..., I think Slackware sounds better than 'Microsoft,'
-- Patrick Volkerding - founder and maintainer of Slackware

Répondre à crabs

2

mackoncef, le 10 sep 2005 à 17:37:09

Ca ne marche pas toujours et cadépend du compilateur
fait plutot un
code_retour = WEXITSTATUS(status) - 128 ;
c'est bete mais ca marche

Répondre à mackoncef

4

 almor57, le 13 sep 2005 à 12:57:55

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

Répondre à almor57

3

almor57, le 13 sep 2005 à 12:51:16

Exactement ce que je cherchais...

Merci bcp

Répondre à almor57