salut a tous pourquoi on commence toujour avec ce si
static void main( args[]
pourais quelqun mexpliqer ça en detail svp et merci d'avance
salut a tous pourquoi on commence toujour avec ce si
static void main( args[]
pourais quelqun mexpliqer ça en detail svp et merci d'avance
Il faut bien que quand tu executes un programme, le système sache par où commencer. Il lui faut donc un point d'entrée identifiable et c'est la fonction main. C'est la 1ere fonction de ton programme qui sera executée.
A noter que si tu programmes sous windows, ça peut aussi bien etre winmain ou autre, mais il y a toujours une fonction de ce genre quelque soit le language.
C'est très etrange.
On m'a appris que le programme commence toujours par la fonction main. Cela est vrai. Mais on m'a aussi appris que main retourne l'etat final de l'execution.
Par consequent, main ne renvoid pas un void mais un int.
Normalement, un programme a toujours une fonction de la forme
Apres, je ne sais pas tout et il est possible qu'il existe d'autre forme. Notamment en C++, il existe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int main( int argc, char** argv )
Mais ce sont les deux seul forme que je connaisse
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int main()
En fait il y a des langages où la fonction main ne renvoie rien, c'est à dire "void", tel que le langage Java.
Pourquoi en Java ça renvoie void et en C++ ça renvoie int ?
Je laisse un Java-man te répondre pour le Java, mais pour le C++, la fonction main renvoie une valeur de type entier : 0 si tout va bien, toute autre valeur si pépin il y a eu.
Sinon pour l'OP, comme on te l'a dit, la fonction main est le point de départ de tout programme, c'est la première fonction qui sera exécutée.
argc/argv permet de récupérer les arguments. Si on sait qu'on n'aura pas à les récupérer alors autant écrire main sans arguments.
Sinon en effet la norme précise bien que main doit être de type int et non void. (même si certains compilo laisse passez ça.)
"Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu
Java est un langage full-object : on ne manipule pas des applications au sens C++ mais des classes "exécutables" par la machine virtuelle.Pourquoi en Java ça renvoie void et en C++ ça renvoie int ?
C'est à cette dernière qu'incombe la tâche d'interfaçage avec le système, et notamment l'envoi des codes d'erreur.
Une classe exécutable peut utiliser la méthode "System.exit(code)" pour indiquer à la JVM de renvoyer un code donné.
C# quant à lui accepte les deux versions du "Main" :
et :
Code : Sélectionner tout - Visualiser dans une fenêtre à part static int Main(...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part static void Main(...)
Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
Mon blog : pragmateek.com
alors main joue le role de begin en pascal
et ma question a quoi ça sert main et void es c'est obligatoire
Effectivement, on pourrait tout a fait assimiler main a la fonction entre BEGIN et END. ( et non BEGIN - END; qui definie juste une fonction )
A quoi main sert-il ??
Tout simplement a definir le point de depart. Imagine que tu ai 115 fonction, comment sais-tu laquelle doit etre executer en premier ? C'est la fonction main et aucune autre.
Void est-il obligatoire ?
Non, il est meme fortement deconseiller dans la mesure ou on souhaite, en C++, savoir le resultat final de notre programme. main retourne donc un int, et ce retour a une convention : 0 veut dire "tout c'est bien passer, il n'y a pas eu de probleme", tout les autre chiffre veulent dire le contraire.
C'est pas fortement déconseillé c'est interdit. Et tout bon compilo bien réglé te sortira une erreur voir à la limite un warning.
(j'ai pas la norme sous les yeux mais la faq de clc++ fera foi) :
http://www.parashift.com/c++-faq-lit....html#faq-29.3
"Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu
merci bcp pour les repenses alors void est indesiré en c++ je sais que je suis sortie du forum mais (void) est obligatoire en java contrairement au c++ ?
merci
Attention entendons nous bien, je dis que void n'est pas standard pour la fonction main hein! Pour les autres ça n'a rien a voir.
"Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu
Je rejoins exactement le même commentaire que Goten.
Depuis le début, nous ne parlons exclusivement que de la fonction Main.
De plus, nous parlons de la syntaxe de Main dans le langage C++ ( et non Java, Pascal .... ).
En C++, la fonction main est la fonction de depart.
Cette fonction renvoit obligatoirement l'etat final sous forme de int.
Les deux seul syntaxe exacte que je connaisse sont :
Tout autre forme de main est, a ma connaissance, fausse et érroné.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int main( int argc, char** argv ) int main()
Désolé si j'ai l'air de rabacher, mais au vu des question ambigue, il faut vraiment mettre les points sur les i.
Pas exactement. Toutes les formes de main doivent retourner int. Les deux formes que tu as citées sont obligatoire (sauf pour une implémentation freestanding, mais là c'est du chipotage à l'intérieur du chipotage que constitue déjà mon intervention). Mais il est autorisé pour une implémentation de définir d'autres formes (on peut imaginer une forme avec wchar_t pour argv, par exemple, ou une forme avec un argument supplémentaire pour transmettre des variables d'environnement).
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
Personne pour dire que la première fonction exécutée n'est pas main mais _start qui appelle main ? Et que bien sur avec je sais plus quelle option de gcc on peut changer ça.
Avec les ordinateurs, 99% des bugs proviennent de l'interface chaise-clavier...
Comment ça 1Km n'est pas égal à 1024m ???
Non, personne, car ce comportement n'a rien de standard, ni de portable
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
Et même si c'était standard ça serait complètement inutile dans le cas qui nous occupe, nous sommes d'accord
Avec les ordinateurs, 99% des bugs proviennent de l'interface chaise-clavier...
Comment ça 1Km n'est pas égal à 1024m ???
De l'importance du int main(void) :
Envoyé par interview de Jess Heinig, programmeur sur Fallout 1
@JolyLoic, @Mérovingien: D'ailleurs, c'est faux sous Windows, où la première fonction d'un exécutable C/C++ à être appelée est mainCRTStartup() (pour un programme console) ou WinMainCRTStartup() (pour un programme fenêtré). Et encore, le "point d'entrée" d'un exécutable peut en fait être n'importe quelle fonction int(void): Il s'agit juste des réglages par défaut de l'édition de liens.
...Et ce fameux point d'entrée est appelé par la fonction BaseProcessStart() de kernel32.dll; c'est la première fonction user-mode du programme.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
@Médinoc : oui, c'est ce que disait JolyLoic, ce n'est pas standard, et on peut le changer . Le principal étant que tout le monde est bien compris que pour être standard, il faut utiliser une des deux formes :
Par contre, y'a t'il une différence entre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int main( int argc, char** argv ) int main(void)
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part int main( int argc, char** argv)
Parce que parfois je vois l'un, parfois je vois l'autre. Quelqu'un sait ce que la norme stipule ou bien celà n'a t'il pas d'importance ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part int main( int argc, char* argv[])
Avec les ordinateurs, 99% des bugs proviennent de l'interface chaise-clavier...
Comment ça 1Km n'est pas égal à 1024m ???
C'est la même chose. Un tableau n'est jamais copié par une fonction. Pour passer un tableau à une fonction, il faut passer une adresse. C'est imposé par le langage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 f(TYPE * t) f(TYPE t[]) f(TYPE t[N])
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager