Exit() en C
Résolu
anthony
-
anthony -
anthony -
Bonjour,
J'ai lu que il faut utiliser exit(EXIT_SUCCESS) quand la valeur est égale à 0, et quand la valeur est égale à 1, il faut utiliser exit(EXIT_FAILURE).
Mais comment on sait si la valeur est égale a 1 ou 0 ??
J'ai lu que il faut utiliser exit(EXIT_SUCCESS) quand la valeur est égale à 0, et quand la valeur est égale à 1, il faut utiliser exit(EXIT_FAILURE).
Mais comment on sait si la valeur est égale a 1 ou 0 ??
7 réponses
exit(EXIT_SUCCESS) vaut pareil que exit(0) ce qui signifie que le programme s'est bien déroulé.
En revanche, rien ne dit dans la norme EXIT_FAILURE vale 1.
Cdlt,
En revanche, rien ne dit dans la norme EXIT_FAILURE vale 1.
Cdlt,
Lorsque la valeur que renvoie le main est 0, c'est que tout s'est très bien passé. Lorsqu'il renvoie 1 c'est que ça ne s'est pas bien passé. En fait, EXIT_SUCCESS et EXIT_FAILURE sont des defines situés dans stdio.h. C'est comme NULL pour les pointeurs : c'est 0, mais on le met par convention, pour montrer que c'est bien un pointeur, et non une simple variable !
exit() est souvent utilisé pour sortir d'un programme en cas de problème. On note alors comme cela : exit(EXIT_FAILURE);. On l'utilise dans une condition if() comme dans cet exemple :
int main (int argc, char *argv[])
{
if ( int a = malloc(sizeof(int)) == NULL ) //On alloue et on teste pour voir si malloc renvoie NULL (cas d'erreur)
{
printf("Message d'erreur"); // On affiche "Message d'erreur"
exit(EXIT_FAILURE); // Et on sort. En fait, cette notation équivaut a écrire exit(1); …
}
// Si l'allocation a marché, tu met ton code ici …
return EXIT_SUCCESS; // Qui équivaut toujours a return 0; ...
}
A+ !
exit() est souvent utilisé pour sortir d'un programme en cas de problème. On note alors comme cela : exit(EXIT_FAILURE);. On l'utilise dans une condition if() comme dans cet exemple :
int main (int argc, char *argv[])
{
if ( int a = malloc(sizeof(int)) == NULL ) //On alloue et on teste pour voir si malloc renvoie NULL (cas d'erreur)
{
printf("Message d'erreur"); // On affiche "Message d'erreur"
exit(EXIT_FAILURE); // Et on sort. En fait, cette notation équivaut a écrire exit(1); …
}
// Si l'allocation a marché, tu met ton code ici …
return EXIT_SUCCESS; // Qui équivaut toujours a return 0; ...
}
A+ !
généralement, quand tu débutes en C, tu fais des programmes qui se suffisent à eux meme. Donc pas pas très utile de dire au programme appelant comment s'est déroulé l'execution.
Cependant, si tu veux faire propre, tu faire EXIT_SUCCESS quand le programme s'est bien déroulé, et EXIT_FAILURE lorsque le programme a récupéré une erreur ... mais honnetement, c'est pas le plus interessant lorsque tu débutes la programmation ;)
Cependant, si tu veux faire propre, tu faire EXIT_SUCCESS quand le programme s'est bien déroulé, et EXIT_FAILURE lorsque le programme a récupéré une erreur ... mais honnetement, c'est pas le plus interessant lorsque tu débutes la programmation ;)
ah ok, mais alors expliquez moi pourquoi ici il utilise exit(EXIT_FAILURE) alors que le programme se déroule très bien
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int menu(void);
int main(void)
{
int choix;
while(1)
{
choix = menu();
if(choix == 1)
{
puts("\nExécution de la tache correpondante au choix 1.");
sleep(5);
}
else if( choix == 2)
{
puts("\nExécution de la tache correpondante au choix 2.");
sleep(5);
}
else if( choix == 3)
{
puts("\nExécution de la tache correpondante au choix 2.");
sleep(5);
}
else if( choix == 4)
{
puts("\nExécution de la tache correpondante au choix 2.");
sleep(5);
}
else if( choix == 5)
{
puts(("\nSortie du programme\n");
sleep(5);
break;
}
else
{
puts("Choix incorrecte, essayer de nouveau");
sleep(5);
}
}
exit(EXIT_FAILURE);
}
int menu(void)
{
int reponse;
puts("\nEntrez 1 pour la tache A");
puts("\nEntrez 2 pour la tache B");
puts("\nEntrez 3 pour la tache C");
puts("\nEntrez 4 pour la tache D");
puts("\nEntrez 5 pour sortir du programme");
scanf("%d", &reponse);
return reponse;
}
Salut,
donc il vaut quoi ?
EXIT_FAILURE est défini dans stdlib.h et sa valeur dépends de système, pour assurer la portabilité du code vaut mieux utiliser la constante symbolique
donc il vaut quoi ?
EXIT_FAILURE est défini dans stdlib.h et sa valeur dépends de système, pour assurer la portabilité du code vaut mieux utiliser la constante symbolique
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Oui, exit(EXIT_FAILURE) vaut autre chose que 0 (booléen) ...
Bien sur que EXIT_FAILURE et EXIT_SUCCESS sont des int, puisque bool n'existe pas en C … Mais on continue a les voir comme des booléens : 0 et 1 sont des entiers, et en même temps des booléens !
Re,
Mais on continue a les voir comme des booléens
Seulement dans le cas d'une condition dans if, for, while ou on teste la valeur de vérité et pas la valeur entière.
Le retour de main est un int, un nombre qui est peut être le code de sortie d'un processus fils par exemple et en ce moment ce n'est pas la valeur de vérité qui importe mais la valeur entière.
Mais on continue a les voir comme des booléens
Seulement dans le cas d'une condition dans if, for, while ou on teste la valeur de vérité et pas la valeur entière.
Le retour de main est un int, un nombre qui est peut être le code de sortie d'un processus fils par exemple et en ce moment ce n'est pas la valeur de vérité qui importe mais la valeur entière.
donc il vaut quoi ?