Comment puis-je faire une console C++ la sortie du programme?
Est-il une ligne de code qui permettra de mettre fin au programme?
Quelque chose comme python sys.exit()
?
Vous devez vous connecter pour publier un commentaire.
Est-il une ligne de code qui permettra de mettre fin au programme?
Quelque chose comme python sys.exit()
?
Vous devez vous connecter pour publier un commentaire.
abort()
par défaut etabort()
quitte le programme sans les destructeurs d'être appelé.Pendant que vous peut appel
exit()
(et peut-être besoin de le faire si votre application rencontre une erreur fatale), la façon la plus propre à la sortie d'un programme est de retour à partir demain()
:Lorsque vous appelez
exit()
, objets automatique de la durée de stockage (variables locales) ne sont pas détruits avant que le programme se termine, si vous n'obtenez pas bon nettoyage. Ces objets peuvent avoir besoin de nettoyer toutes les ressources qu'ils possèdent, persistent tout en attendant les modifications de l'état, mettre fin à toute threads en cours d'exécution, ou effectuer d'autres actions pour que le programme de résilier proprement.main
pourrait être préférable deexit()
. C'est vraiment un vestige de C.exit()
" peu, désolé pour la confusion.Il y a plusieurs façons à cause de votre programme de résilier. Celle qui est appropriée dépend de pourquoi vous voulez que votre programme à la fin. La grande majorité du temps, il devrait être par l'exécution d'une instruction de retour dans votre fonction principale. Comme dans l'exemple suivant.
Comme d'autres l'ont identifié cela permet à tous de votre pile de variables pour être correctement détruits de manière à nettoyer correctement. C'est très important.
Si vous avez détecté une erreur quelque part au fond de votre code et que vous devez sortir, vous devriez jeter une exception pour revenir à la fonction principale. Comme dans l'exemple suivant.
Cela provoque de la pile pour être dénoué une toutes vos variables de pile à être détruits. Encore très important. Notez qu'il est approprié pour indiquer l'échec avec un zéro de la valeur de retour.
Si dans le cas peu probable que votre programme détecte une condition qui indique qu'il n'est plus sûr d'exécuter plusieurs instructions, alors vous devriez utiliser std::abort(). Cela permettra de porter votre programme à un arrêt brutal sans traitement supplémentaire. std::exit() est similaire, mais peut faire appel atexit gestionnaires qui pourrait être mauvais si votre programme est suffisamment complètement foireuse.
std::abort()
doit être utilisé pour la résiliation immédiate.std::terminate()
doit être utilisé uniquement par la gestion des exceptions C++ des installations de gestion des exceptions ne parvient pas; vous ne devriez pas l'appeler directement.stop_now_t
type d'exception est un abus du système d'exception. Son utilisation pourraient indiquer que vous êtes en utilisant les exceptions pour le mode normal de contrôle de flux (ce qui est généralement mauvais). Une fonction ne devrait pas lever une exception en sachant qu'il ne sera pris enmain()
; il doit lever une exception, en supposant qu'il peut être pris par tout appelant qui peut gérer l'exception.@
avant que quelqu'un du nom d'utilisateur, cette personne recevra une notification lorsqu'ils se connectent à voir qu'ils ont un message)Oui!
exit()
. C'est dans<cstdlib>
.std::exit
vraiment 🙂Permettant l'exécution de flux de quitter
main
par retour d'une valeur ou d'autoriser l'exécution d'atteindre la fin de la fonction est la façon dont le programme devrait mettre fin à l'exception en vertu de l'irrécupérable circonstances. De retour d'une valeur est facultative en C++, mais en général, je préfère retournerEXIT_SUCCESS
trouvé dans cstdlib (une plate-forme spécifique qui indique que le programme s'est exécuté avec succès).Si, cependant, votre programme atteint un état irrécupérable, il doit lever une exception. Il est important de comprendre les implications de cela, cependant. Il n'y a pas largement accepté par les meilleures pratiques pour décider de ce qui doit ou ne doit pas être une exception, mais il ya quelques règles générales que vous devez être conscient de.
Par exemple, lancer une exception à partir d'un destructeur est presque toujours une mauvaise idée parce que l'objet est détruit pourrait avoir été détruite à cause d'une exception avait déjà été levée. Si une deuxième exception est levée,
terminate
est appelé et que votre programme s'arrête sans plus de nettoyage ait été effectuée. Vous peut utilisationuncaught_exception
pour déterminer si c'est sûr, mais il est généralement préférable de ne jamais autoriser des exceptions à laisser un destructeur.Alors qu'il est toujours possible pour les fonctions en vous appeler, mais n'a pas écrit de lever des exceptions (par exemple,
new
va jeterstd::bad_alloc
si il ne peut pas allouer suffisamment de mémoire), il est souvent difficile pour les débutants que pour les programmeurs de garder une trace de, ni même de connaître toutes les règles entourant les exceptions en C++. Pour cette raison, je recommande uniquement les utiliser dans des situations où il n'y a pas de bon sens pour votre programme pour continuer l'exécution.exit
est un hold-dessus de C et peut entraîner des objets avec stockage automatique pour ne pas être nettoyés correctement.abort
etterminate
provoque efficacement le programme à commettre le suicide, et certainement ne pas nettoyer les ressources.Quoi que vous fassiez, ne pas utiliser les exceptions,
exit
, ouabort
/terminate
comme une béquille pour obtenir autour de l'écriture adéquate d'un programme structuré. Les enregistrer pour les situations exceptionnelles.si vous êtes dans la principale que vous pouvez faire:
ou
Le code de sortie dépend de la sémantique de votre code. 1 erreur 0 e une sortie normale.
Dans une autre fonction de votre programme:
de sortie du programme.
Dans main(), il y a aussi:
return 0;
? Donc, ce serait quitter le programme si j'ai appeléf()
?int f() { return 0; }
exit
est en fait une assez mauvaise façon de mettre fin au programme de la pire façon, il y a, parmi beaucoup d'autres possibles), je dirais.exit(0); //fin de la fonction principale avant la fermeture des accolades
main()
a le même effet que l'appel à laexit()
, avec l'avantage supplémentaire que les variables locales demain()
sont détruits.assez simple..
exit ( 0 );
}//fin de la fonction
Assurez-vous que il y a un espace sur les deux côtés de l'0. Sans les espaces, le programme ne s'arrêtera pas.