Signaler

Valeur retournée en programmation

Posez votre question Lazad - Dernière réponse le 2 déc. 2016 à 16:02
Bonjour, s'il vous plaît ou se trouve les valeurs retournées certifiant qu'un programme a bien marché? Par exemple, en C on renvoit générealement un 0, si j'exécute un programme C ou se trouvera cette valeur? Merci d'avance
Afficher la suite 
Utile
+0
moins plus
  • Sous cmd.exe (Window$):

https://blogs.msdn.microsoft.com/oldnewthing/20080926-00/?p=20743/
http://ss64.com/nt/errorlevel.html
  • Sous bash

La variable $? fournit le code d'erreur de la commande précédente.
Ajouter un commentaire
Utile
+0
moins plus
C on renvoit générealement un 0, si j'exécute un programme C ou se trouvera cette valeur?

Le standard du C prévoit seulement que :

- ces valeurs sont des valeurs de statut de fin destinées à l'environnement d'exécution, qui peut, on non, faire usage de ces informations,
- que si la valeur de retour est 0 ou EXIT_SUCCESS, c'est une information de succès qui est donnée,
- que si c'est EXIT_FAILURE, c'est une information d'erreur,
- et que toute autre valeur peut éventuellement avoir une signification en fonction de l'environnement d'exécution.

Sauf environnement particulier (embarqué), dès lors qu'un programme est lancé dans un système d'exploitation, il faut intégrer cette valeur de retour pour faire du code conforme au standard.

Dans sa réponse, jisisv a expliqué comment récupérer ce code au moyen du shell cmd ou bash, et cela marchera si le programme est lancé, et l'interrogation des variables d'environnement faite, à partir du même shell. Donc si : (1) tu ouvres un shell, (2) tu lances le programme, (3) tu vérifies la variable d'environnement.

A partir de tes programmes C, si tu lances d'autres programmes et que tu veux récupérer la valeur de retour, tu devras faire autrement, et également différemment selon les systèmes pour être sûr de récupérer la bonne information.

Sous Windows, c'est avec l'exécution du processus passant par CreateProcess() que tu vas pouvoir récupérer l'info avec GetExitCodeProcess()

exemples :
https://msdn.microsoft.com/en-us/library/ms682512%28v=vs.85%29.aspx
https://www.codeproject.com/tips/333559/createprocess-and-wait-for-result

Sous Linux et systèmes de type Unix (POSIX), un fork avec un waidpid suffit

https://linux.die.net/man/2/waitpid

(la page de manuel donne un exemple)

Utiliser system() ne te permettra pas nécessairement de récupérer une information fiable, car le standard ne définit rien d'obligatoire pour la valeur retournée par cette commande, qui est à l'appréciation de l'implémentation de C et du système.


Dal
Ajouter un commentaire

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !