Re: exit ou return

Page principale

Répondre à ce message
Auteur: Francois-Xavier KOWALSKI
Date:  
À: guilde
CC: 
Sujet: Re: exit ou return
>>>>> "Francois" == Francois CAU <Francois.CAU@???> writes:

  Francois>      En regle generale:
  Francois>         - main() est toujours de type int
  Francois>         - exit(code) est utilise pour remonter un code d'erreur au 
  Francois>      programme appelant (shell).


  Francois>      Si quelqu'un a plus d'explications theoriques...


Inexact: On peut très bien avoir le prototype suivant:

void main(int argc, char *argv[]);

Auquel cas, exit(val) est le seul moyen de réccupérer le code d'erreur
(présent dans $? sous bash, sh, zsh & prédécesseurs/dérivés[1]). Pour
mémoire, les conventions du shell (à utiliser avec exit() ou return
depuis le main()) sont l'opposé du C/C++:

- 0: pas d'erreur

- >0: erreur (on peut retourner errno)

- <0: Déconseillé, vu la difficulté de certains shells (csh) à gérer
les nombres relatifs (en dehors de bc, bien sur...)

Autrement, exit() étant une fonction de la librairie standard, je
suppose qu'elle fait naturellement un peu de ménage avant de sortir
(type libérer le tas de mémoire & fermer les descripteurs de fichiers
ouvert, ... etc).

Mon conseil: exit(errno);

A+.
    Fix.


Footnotes:

[1]  En ce qui concerne le traitement du code de retour, il n'est
     disponible pour un process parent que si le process enfant a été
     lancé en synchrone (sans "&" dans le cas d'une commande system(),
     ou sans fork() en éxécution directe).


     Sinon, ouvrir un descripteur de fichier commun (cf. pipe())
     semble être la manière la plus simple d'échanger des infos.


-- 
Fix & Cathy KOWALSKI                      mailto:ayoul@club-internet.fr
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
A strife of interests masquerading as a contest of principles.  The
conduct of public affairs for private advantage.  -- Ambrose Bierce