IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

la fonction principale main


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de bahiatoon
    Inscrit en
    Juillet 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juillet 2006
    Messages : 169
    Par défaut la fonction principale main
    Salut,

    Il y a des choses que je souhaiterais comprendre pourriez vous m'aider s'il vous plaît:

    1/ Le type de retour de la fonction main est int j'aimerais bien comprendre pourquoi ???

    2/ IL y a ceux qui préfèrent utiliser void main est ce que c'est juste de le faire et pourquoi ???

    3/ à quoi sert le return 0 ???

    Merci de me répondre

  2. #2
    Membre très actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Par défaut
    Salut !

    1/ Un entier est retourné pour indiquer dans quel état l'application s'est arrêtée, il peut également s'agir d'un code erreur, documenté a part.

    2/ Il est possible d'utiliser void mais ce n'est pas recommandé car non conforme a la norme ANSI. Pour tester un petit bout de code vite fait ce n'est pas dramatique.

    3/ 0 est le code signifiant que l'application c'est arrêtée normalement, et -1 qu'il y a eu une erreur. Pour ne pas avoir a retenir ces nombres et amélioré la portabilité, l'entête standard stdlib définit deux constantes : EXIT_SUCCESS et EXIT_FAILURE.

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,
    Citation Envoyé par TheDrev Voir le message
    2/ Il est possible d'utiliser void mais ce n'est pas recommandé car non conforme a la norme ANSI. Pour tester un petit bout de code vite fait ce n'est pas dramatique.
    Autant prendre la bonne habitude, même pour des tests courts, de retourner un entier.
    Citation Envoyé par TheDrev Voir le message
    3/ 0 est le code signifiant que l'application c'est arrêtée normalement, et -1 qu'il y a eu une erreur.
    Non. EXIT_FAILURE est égal à +1.
    Le standard veut que les codes de retour de programmes soient des entiers positifs (ou nul si tout c'est bien passé).
    Exemple :
    Citation Envoyé par man ls
    Exit status is 0 if OK, 1 if minor problems, 2 if serious trouble.
    Dernière modification par Emmanuel Delahaye ; 04/11/2008 à 18h08.

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par mabu Voir le message
    Non. EXIT_FAILURE est égal à +1.
    Non. Ça dépend du système.

    Le standard veut que les codes de retour de programmes soient des entiers
    plus exactement des int.
    positifs
    euh, tu as la preuve de ça ?
    Citation Envoyé par N1256
    WG14/N1256 Committee Draft — Septermber 7, 2007 ISO/IEC 9899:TC3
    5.1.2.2.3 Program termination
    1 If the return type of the main function is a type compatible with int, a return from the
    initial call to the main function is equivalent to calling the exit function with the value
    returned by the main function as its argument;10) reaching the } that terminates the
    main function returns a value of 0. If the return type is not compatible with int, the
    termination status returned to the host environment is unspecified.
    Je ne vois rien qui impose un int > 0.

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Il me semble me rappeler (mais c'est loin) que sous Unix (HP-UX au moins), la valeur de retour servait à indiquer la cause de la fin de programme.

    On pouvait ainsi savoir si c'était un return du main (ou exit()) ou bien un signal non géré ou une exception suivant la valeur retournée. Il y avait un tas de macros qu'on pouvait utiliser avec wait()
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #6
    Membre chevronné Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    euh, tu as la preuve de ça ?
    En POSIX il n'y a que l'octet le moins significatif de l'int qui pourra être récupéré, donc il vaut mieux se limiter.

    The value of status may be 0, EXIT_SUCCESS, EXIT_FAILURE, [CX] [Option Start] or any other value, though only the least significant 8 bits (that is, status & 0377) shall be available to a waiting parent process.
    http://www.opengroup.org/onlinepubs/...ions/exit.html

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par dapounet Voir le message
    En POSIX il n'y a que l'octet le moins significatif de l'int qui pourra être récupéré, donc il vaut mieux se limiter.
    Hors-sujet.
    1. Le C n'est pas POSIX.
    2. On est pas dans la section POSIX.

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par TheDrev Voir le message
    2/ Il est possible d'utiliser void mais ce n'est pas recommandé car non conforme a la norme ANSI. Pour tester un petit bout de code vite fait ce n'est pas dramatique.
    A part qu'une valeur indéfinie est retournée au système et que par conséquent, le comportement est indéfini (le pire des bugs !)...

    http://emmanuel-delahaye.developpez.com/notes.htm#ub

    -1 qu'il y a eu une erreur.
    Tu sors ça d'où ? Sur quel système ?
    Pour ne pas avoir a retenir ces nombres
    et éviter de raconter une ânerie...

  9. #9
    Membre chevronné Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Par défaut
    Bonsoir,

    Citation Envoyé par TheDrev Voir le message
    2/ Il est possible d'utiliser void mais ce n'est pas recommandé car non conforme a la norme AINSI. Pour tester un petit bout de code vite fait ce n'est pas dramatique.
    Ce n'est pas seulement pour faire plaisir à la norme, sur les systèmes actuels on est habitués à ce que chaque programme fasse savoir comment son exécution s'est passée par son code de retour, et c'est très souvent utilisé sous Unix.
    Donc même si quand on teste le programme il ne semble pas y avoir de problème, un utilisateur qui l'appelle différemment aura peut-être un comportement indéterminé.
    Par exemple si à partir d'un shell il veut lancer le programme puis exécuter une commande :
    Le shell se basera sur la valeur de retour du programme pour savoir si il s'est terminé correctement, et si ce n'est pas le cas il n'exécutera pas la commande.
    Si main() ne renvoie rien, la valeur que récupèrera le shell est indéterminée. Peut-être qu'il aura tout le temps l'impression que le programme a eu un problème, ou l'inverse, ou que ce sera aléatoire...

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par bahiatoon Voir le message
    1/ Le type de retour de la fonction main est int j'aimerais bien comprendre pourquoi ???
    Parce que le système attend un compte rendu d'exécution. Les valeurs
    • 0
    • EXIT_FAILURE
    • EXIT_SUCCESS

    sont portables.

    0 a la même signification que EXIT_SUCCESS.

    2/ IL y a ceux qui préfèrent utiliser void main est ce que c'est juste de le faire et pourquoi ???
    C'est une erreur.

    http://emmanuel-delahaye.developpez....s.htm#typemain
    3/ à quoi sert le return 0 ???
    A retourner OK au système.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. inclure fonction dans main()
    Par tata1 dans le forum Débuter
    Réponses: 2
    Dernier message: 02/04/2010, 13h41
  2. Réponses: 3
    Dernier message: 05/04/2009, 11h10
  3. Réponses: 4
    Dernier message: 03/10/2008, 15h59
  4. Début de la fonction principale
    Par Minouchka dans le forum Débuter
    Réponses: 6
    Dernier message: 23/11/2007, 17h19
  5. definition prototypes de fonctions dans main
    Par fantomas261 dans le forum C
    Réponses: 4
    Dernier message: 19/10/2007, 11h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo