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 :

int main() vs void main()


Sujet :

C++

  1. #1
    Membre actif
    Avatar de yorukaze
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 285
    Points : 299
    Points
    299
    Par défaut int main() vs void main()
    Bonjour,

    je suis en pleine instruction de ce fabuleux language et je me pose une question.
    J'ai des elements de reponse trouvées sur les forums mais a chaque fois les reponses sont mitigées.
    Je travail a partir du livre "Le language C++" de chez CampusPress et dans cet ouvrage ou me preconise de ne plus utilisé void main().
    En effet apparemment ca ne se fait plus il est conseillé de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int main()
    {
     
         le code;
    return 0;
    }
    l'argument est que une valeur entiere est renvoyée (donc ici 0) ce qui informe que le programme s'est terminé correctement.
    Dans le cas de void main() aucun retour n'est effectué.
    Ma question est donc de savoir si il vaut mieux l'int ou void pour la fonction main.
    J'espere que j'ai bien expliqué la chose je m'efforce de faire au mieux et je pense pas dire trop de betise

    merci

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    void main() n'est tout simplement pas standard, même s'il sera accepté par certains compilos. Donc la question ne se pose même pas

  3. #3
    Membre actif
    Avatar de yorukaze
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 285
    Points : 299
    Points
    299
    Par défaut
    Citation Envoyé par Laurent Gomila
    void main() n'est tout simplement pas standard, même s'il sera accepté par certains compilos. Donc la question ne se pose même pas
    merci pour ta reponse.Toutefois certains scripts que l'on trouve un peu partout sur le net presentent void .
    mais je vais me contenter de ne pas l'utiliser si apparemment c'est le meiux.
    merci de ta reponse.

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    La valeur que retourne un main, c'est le code de sortie de ton processus et ce code, l'ordonnanceur de ton système d'exploitation en a besoin pour pouvoir déterminer au mieux ce qu'il doit faire pour terminer ton programme ! Donc si tu dis au compilateur que ton main ne retourne pas de valeur, je pense (mais je n'émet que des suppositions là) qu'il termine le processus avec un code de sortie par défaut... tout dépend aussi de ton OS.

    C'est la raison que je donne tout le temps lorsqu'on me pose cette question et je pense que c'est également la plus pertinente

  5. #5
    Membre actif
    Avatar de yorukaze
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 285
    Points : 299
    Points
    299
    Par défaut
    Citation Envoyé par Franck.H
    La valeur que retourne un main, c'est le code de sortie de ton processus et ce code, l'ordonnanceur de ton système d'exploitation en a besoin pour pouvoir déterminer au mieux ce qu'il doit faire pour terminer ton programme ! Donc si tu dis au compilateur que ton main ne retourne pas de valeur, je pense (mais je n'émet que des suppositions là) qu'il termine le processus avec un code de sortie par défaut... tout dépend aussi de ton OS.

    C'est la raison que je donne tout le temps lorsqu'on me pose cette question et je pense que c'est également la plus pertinente
    ok je comprends bien ce que tu veux dire.
    Je tourne aussi bien sous linux que windows avec code::blocks.Je vais adopter l'utilisation standard (apparemment) de int main() avec le return0 en fin de fonction au moins je respecterai les standards(je sais pas encore lesquels de standard mais je vais bien trouver )
    merci.

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par yorukaze
    ...avec le return0 en fin de fonction au moins je respecterai les standards(je sais pas encore lesquels de standard mais je vais bien trouver )
    merci.
    En C++ je pense que c'est pareil qu'en C donc tu peux même utiliser la constante EXIT_SUCCESS (il faut inclure stdlib.h en C, en C++ à voir) pour le return

  7. #7
    Membre actif
    Avatar de yorukaze
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 285
    Points : 299
    Points
    299
    Par défaut
    Citation Envoyé par Franck.H
    En C++ je pense que c'est pareil qu'en C donc tu peux même utiliser la constante EXIT_SUCCESS (il faut inclure stdlib.h en C, en C++ à voir) pour le return
    oué mais ca veut dire pour moi rajouter du code et une librairie que je ne connais pas encore.Bien entendu si je me lance dans ma formation c'est bien parce que j'ai envi d'apprendre mais j'essaie d'apprendre deja les bases et en peu au plus simple pour bien progresser.

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    oué mais ca veut dire pour moi rajouter du code et une librairie que je ne connais pas encore
    stdlib.h est un en-tête de la bibliothèque standard. C'est l'un des fichiers de base, et il y a de grandes chances qu'il soit inclus par un autre en-tête standard de toute façon. Donc ne t'inquiète pas pour ça.

  9. #9
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Oui moi je parle du point de vue du C uniquement mais vu la ressemblance entre les deux langages ....

  10. #10
    Membre actif
    Avatar de yorukaze
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 285
    Points : 299
    Points
    299
    Par défaut
    Citation Envoyé par Laurent Gomila
    stdlib.h est un en-tête de la bibliothèque standard. C'est l'un des fichiers de base, et il y a de grandes chances qu'il soit inclus par un autre en-tête standard de toute façon. Donc ne t'inquiète pas pour ça.
    il faut encore mettre les.h?
    je prends l'exemple de iostream (je ne connais que celle la pour l'instant .Des fois il me semble que l'on trouve les .h d'autres fois nan.Ca depend des compilateurs?


    Franck.H tu parles de ressemblance entre C et Cpp, la dessus je suis ok mais y'a qd meme des différences et en tant que debutant je ne veux pas prendre de mauvaise habitude en prenant des syntaxe n'etant pas dans la norme ISO/ANSI pour le cpp.

    Enfin, je sais que ca ne rentre pas dans le cadre de ce post mais je voudrais savoir comment vous impliquer cout et cin dans vos scripts:
    -std::cout/cin?
    -using namespace std?

    Je suis pas sur que la 2eme solution soit la meilleur parce que apparemment cin et cout sont des objets inclus dans la bibioltheques iostream mais on peut la trouver aussi dans d'autres bibliotheques.On doit donc a chaque fois mettre std:: a chaque fois?

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Je me suis posé ces même question il n'y a pas longtemps.
    En fait c'est une longue histoire de namespace dont je ne voudrais pas trop parler pour éviter de dire des bêtises!

    J'avais ouvert une discussion pour savoir quelle était la bonne syntaxe la plus au norme que possible, tu pourra aller la voir en cliquant ICI.

    ++

  12. #12
    Membre actif
    Avatar de yorukaze
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 285
    Points : 299
    Points
    299
    Par défaut
    ok merci beaucoup pour le lien je pars en lecture

  13. #13
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    sinon <iostream.h> existe aussi. Tu n'as même pas besoin d'utiliser le namespace std et les endl.

  14. #14
    Membre actif
    Avatar de yorukaze
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 285
    Points : 299
    Points
    299
    Par défaut
    Citation Envoyé par coyotte507
    sinon <iostream.h> existe aussi. Tu n'as même pas besoin d'utiliser le namespace std et les endl.
    ba je comprends pas trop pourquoi si on inclue iostream.h change tout par rapport a l'inclusion de isostream sans .h
    je vais chercher ca mais je croyais que le .h ne servait que pour certains compilateurs
    endl sert bien a sauter une ligne donc je vois pas pourquoi on devrait les enlever

  15. #15
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Citation Envoyé par coyotte507
    sinon <iostream.h> existe aussi. Tu n'as même pas besoin d'utiliser le namespace std et les endl.
    <iostream.h> n'a jamais fait partie du standard, mieux vaut l'oublier.

    Pour le reste inutile de paniquer, tout est expliqué dans la FAQ, il suffit de prendre 5 minutes pour lire les explications.

  16. #16
    Membre actif
    Avatar de yorukaze
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 285
    Points : 299
    Points
    299
    Par défaut
    j'ai commencer la lecture de la fac mais tu te rappel peut etre comme ca peut etre difficile de commencer si tu étais seul .
    Je peux qd meme me permettre de dire que coyotte507 a dit un peu n'importe quoi.
    Comme l'a précisé Laurent, iostream.h n'est pas/plus normalisé, il ne faut donc pas utiliser cette synthaxe mais plutot #include<iostream>.
    L'utilisation de endl me parait qd meme important et je ne vois toujours pas pourquoi coyotte me recommande de ne pas m'en servir

  17. #17
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    non c'est juste une alternative, j'ai un bouquin de c++ ou ils n'utilisent que ça (et \n à la place de endl). Mais fais comme tu veux.

  18. #18
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    1) Il y a des bouquins dont l'existence est absurde, qui ne respectent pas la norme C++ et racontent des bêtises.
    2) Quel est ton bouquin?

  19. #19
    Membre actif
    Avatar de yorukaze
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 285
    Points : 299
    Points
    299
    Par défaut
    Citation Envoyé par coyotte507
    non c'est juste une alternative, j'ai un bouquin de c++ ou ils n'utilisent que ça (et \n à la place de endl). Mais fais comme tu veux.
    moi mon bouquin de chez Campus press s'engage apparemment a respecter les normes, les \n et endl sont tous les 2 utilisés et ca tombe bien puisque meme si le rendu est le meme, en prfondeur nan (c'est mis ds la FAQ la difference)

  20. #20
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    endl c'est une fonction qui en plus d'afficher \n fait aussi un flush...

Discussions similaires

  1. Methode public static void main (String [] args)
    Par jeremypd dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 09/01/2017, 10h53
  2. int main(); = void main(); ?
    Par -matt- dans le forum C
    Réponses: 7
    Dernier message: 11/03/2013, 16h42
  3. methodes dans "void main"
    Par kevinou55 dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 06/10/2008, 18h49
  4. Code de retour d'un void main
    Par stof dans le forum Visual C++
    Réponses: 6
    Dernier message: 19/04/2007, 12h38
  5. [Débutant]#entre int main & void main
    Par Binga dans le forum C
    Réponses: 9
    Dernier message: 10/08/2004, 15h54

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