Menu

Valeur retournée en programmation [Fermé]

Lazad - 1 déc. 2016 à 21:29 - Dernière réponse : [Dal] 4569 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention
- 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 

2 réponses

jisisv 3662 Messages postés dimanche 18 mars 2001Date d'inscriptionModérateurStatut 15 janvier 2017 Dernière intervention - 2 déc. 2016 à 05:13
0
Utile
  • 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.
[Dal] 4569 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention - Modifié par [Dal] le 2/12/2016 à 16:16
0
Utile
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