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.)
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(...)
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
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.
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).
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.
Non, personne, car ce comportement n'a rien de standard, ni de portable
Et même si c'était standard ça serait complètement inutile dans le cas qui nous occupe, nous sommes d'accord
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.
@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[])
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