Bon voila j´aimerai savoir comment appeler une fonction à partir d´une autre en C++ sans qu´aucune des deux soit la "main".
par exemple quand dans ma fonction blabla
je fais :
fonction()
ca ne marche pas pourtant c comme ca que j´appelle la fonction blabla à partir de la fonction main
ca me fait penser à une autre question:
g sais qu´il y a une commende:
system("pause");
quand je l´inclue dans un de mes codes il me dit que la variable system n´a pas ete declaree(ou un truc dans le genre)
je programme sous visual studio
Salut,
Pour ta première question, il n´y a rien de particulier à faire pour appeller une fonction dans une autre fonction. Tu dois simplement les avoir déclarées toutes les deux.
Pour ce qui est de ton system("Pause"), tu dois pour cela inclure le fichier en-tête stdlib.h .
merci vampire : )
heu pour la question 1 en fait disons que j´ai le code:
int fonctiondeux()
{
//source
main();
}
int fonctionun()
{
//source
fonctiondeux();
}
int main()
{
//source
fonctionun();
}
ca me fait plus ou moins ca ce code
quand jappelle main() il me dit que ca marche pas et quand jessaies dappeler les fonctions entre eux non +, je mets generalement cette instruction a la fin avant un return 0
Je ne sais pas si tu l´as remarqué mais vu comme ça ton code est une boucle sans fin.
Tu appelles dans la fonction main ta fonction un qui appelle ta fonction deux et qui elle rappelle la fonction main.
Sinon pour le reste, je n´ai pas vu d´erreur.
Ton code devrait ressembler à ca:
//Prototypes de tes fonctions
int fonctionun();
int fonctiondeux();
//fonction principale
int main()
{
fonctionun();
return 0;
}
//fonctions
int fonctionun()
{
//source
fonctiondeux();
}
int fonctiondeux()
{
//source
}
et ouais : )
en fait c que je cherchais a faire un menu mais en passant par des fonctions, donc des que l´une etait finie elle revenait en arriere a la principale, donc ct bien une boucle...
en fait j´avais oublie d´appeler les prototypes des fonctions enfin la boucle est-elle genante? peut on appeler la fonction main a partir d´une autre fonction?
Pour faire un menu une boucle while aurait suffit, mais tout dépend si tu voulais afficher le menu une seule fois ou plusieurs fois suivant la réponse de l´utilisateur.
La fonction main n´est pas une fonction comme les autres, on peut dire que c´est le coeur de ton programme. C´est à partir de celle-ci que tu doit appeller les autres fonctions. Donc en règle générale elle n´est pas appellé dans d´autre fonction.
Si je me souviens bien, tu ne peut pas l´appeller. C´est donc normal si ca boggait lors de son appel. Quant aux prototypes, ce nétait pas important dans ce cas si(T´aurrais pu t´en passer) mais il faudrait toujours les mettre, peut importe, ça sécurise et en plus ça rend le code plus clair et plus beau ; P
Kelios
---------
Non, on ne peut pas appeler la fonction Main, parce qu´elle est en permanence "en cours", disons. La fonction est lancée au lancement de ton programme, et le programme se termine quand la fonction est terminée. Et toutes les autres fonctions que tu appelles sont directement ou indirectement appelées par la fonction Main ; tu ne peux donc pas la réappeller puisqu´elle est déjà en cours d´exécution.
Pour la boucle donc, tu peux utiliser while, repeat, ou for. Tout doit etre noté dans la doc, si tu n´en a pas , tu peux en trouver un peu partout sur le Net.
Mais qu est ce que tu raconte comme merde superdindon ? ? LOL C aussi nul que lhistoire des garcon qui naissent dans les choux et les filles dans le roses (...y naisse ou les dindons ? dans la casserole ? : -)
As tu deja entendu parler des fonctions recursivent.. tu sais! les fonctions qui sappellent elles meme... elles sont pourtant en cours d execution puisquelle sappelle elle meme ! .
Pour tout te te dire vampire, c vraiment une etrange idee que dappeler la fonction main.... mais ca devrait marcher.. aux 2 seules conditions que ta boucle se termine un jour et que tu ne fasse de pas depassement de pile ! (aka... trop de boucle : -)
Euh, je crois qu´il y a une petite confusion là, en fait je répondais aux questions de thedebutant mais c´est pas grave : )
Loin de moi l´idée d´appeller la fonction main en récursivité, je sais que ca marche pendant au moins 5 secondes pour avoir tester le code de thedebutant, mais comme tu le dis arnaud81 sans condition de sortie de boucle il y a dépassement de pile et donc plantage.
ah vi, y a eu confusion : ) lors de la redaction jai remonte lhistorique des messages et je me suis arrete au premier surnom inconnu... en loccurence le tien : ) Celui de thedebutant etait juste apres : P
C´est pas grave, c´est vrai que je passe plus de temps à lire les messages qu´a y répondre : )
Désolé SuperDindon, mais dans ce cas ci, j´aurais tendance à pencher pour Arnaud.
Néanmoins, il y a du vrai chez les deux.
-Les fonctions récursives existent bel et bien, mais ce n´est pas toutes les fonctions qui sont récursives(je pense entre autres aux inlines, innadmissibles à la récursivité).
Là, il faudrait voir si Main peut être récursivé.
Ah, et:
=================================================
SuperDindon Posté le 18 novembre 2002 à 08:15:13
"tu peux utiliser while, repeat, ou for"
Repeat? REPEAT? Keseksa? C´est pas bien de mélanger les languages de prog.... ; P : D
=================================================
Cepandant, connaissant SuperDindon, il doit surement connaitre la réponse à la question existencielle:
"Main est-elle récursive?"
-------------------------------------------------
Ce qui a de génial avec ce forum, c´est que bien qu´étant officiellement pas spécialisé dans la prog, on y élabore une un combat-dialogue sur la récursivité de Main... Génial...... : P
Kelios
---------
Je vois de la perversite dans la question "main etait recursive" mais peut etre est ce mon esprit pervert qui vois tout de cette maniere : )
les fonctions inline ne sont pas fonctions telle qu on les entend ! puisquelles sont integres dans la fonction appellante, et qu il y a donc pas de saut vers elles (on economise la pile). Donc g raison !
Oui, les inlines sont instansiés lors d´un appel. Ils n´ont donc pas d´adresse, ce qui cause que:
-On ne peut pas utiliser un pointeur de fonctions sur elles.
-Elles ne peuvent se récursiver.
-On ne peut les déclarer dans un . h, et fournir leur définition dans un autre . cpp Il faut les déclarer ET les définir en même temps.
Mais bon, on s´égare(on passe du Main aux inlines).
Alors, quelqu´un répond-t-il à notre question? HoéHoé, appel à tous.
Kelios
---------
J´ai fait le test sur la récursivité de main, voila le message d´erreur:
warning C4717: ´main´ : recursive on all control paths, function will cause runtime stack overflow
Cela n´empêche pas le programme de compiler mais son éxécution provoque un dépassement de pile puis une sortie pure et simple du programme.
Ouais, bon, je ferais mieux de me taire.
Mais je vais continuer quand meme, à mes risques et périls.
Pour ce qui est de main, je ne sais pas trop. En fait, il peut y avoir 2 possibilités:
-Soit main nécessite certaines valeurs dans les registres( je parle en Assembleur)(initialisé par le kernel, par exemple, mas je suis pas sur du tout) et dans ce cas elle n´est pas récursive sauf si le compilateur a lancé un "push" avant de lancer la fonction main, et là, ça dépend donc totalement du compilo.
-Soit main n´a besoin de rien pour se lancer, et elle peut donc etre récursive. Mais bon faut pas trop rever pour faire une boucle. Je crois qu´il existe des moyens pour controler la pile manuellement dans le sdk win, mais ce sarait une perte de temps...