Ce que retourne le main, c'est une valeur numérique qui sert généralement à indiquer comment un programme s'est terminé.
On s'en sert la plupart du temps avec
0 si ça s'est bien passé
autre chose sinon, avec souvent plusieurs valeurs pour différencier les cas.
Reste à voir ce que ça veut dire. Si j'écris un jeu, est-ce qu'il doit retourner 0 quand le joueur a perdu ?
Si je lance la commande true, elle retourne 0
$ true
$ echo $?
0
jusque là tout va bien.
Si je lance false, qui existe aussi
$ false
$ echo $?
1
Est-ce que ça veut dire qu'elle s'est mal passée ? non, au contraire. Elle a fait parfaitement son job, qui est de se terminer avec le code de retour 1.
Donc il faut mettre un peu en veilleuse l'interprétation comme quoi ça serait un "code d'erreur". C'est un "exit code" retourné à la terminaison du programme, point barre. Ce qu'il signifie, c'est une interprétation qui dépend du programme.
Et c'est pas au shell d'interpréter ce code (en affichant un message d'erreur par exemple) si on ne lui demande pas de le faire.
- Edité par michelbillaud 29 septembre 2022 à 17:25:12
j'ai essayé écho $?, j'obtiens 1 avec return 1, et 0 pour toutes les autres vareuses (return 0, return 2, return 3 etc.)
J'ai toujours vu dans les différents cours qu'i fallait mettre return 0, mais sans avoir compris vraiment pourquoi "0", le return, oui, c'est normal, le fait d'avoir mis int devant main, signifie que la fonction renvoie un entier.
Ah, je l'ai retrouvé ! Un petit script qui fait deux choses : compiler mon programme, puis si la compilation s'est bien passée, exécuter le programme.
#!/bin/bash
clear
if cc ac.c config.c carte.c coords.c -o ac -lm
then ac liste.txt
fi
Il y a deux programmes : 'cc' (le compilateur) et 'ac' (mon programme). Si 'cc' retourne un code différent de 0 (la compilation n'a pas réussi), le 'then' ne sera pas exécuté (ni mon programme, du coup). Il me semble que si c'est le retour de mon programme que je testais, ça marcherait pareil (mais je n'ai pas essayé).
Bref, en C le 'main' retourne un entier qu'on n'est pas obligé d'utiliser, mais qui peut servir dans ce genre de contexte.
Merci de colorer votre code à l'aide du bouton Code
Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: cpp;">Votre code ici</pre>.
Merci de modifier votre message d'origine en fonction.
Il y a longtemps (sous dos p.ex.), un programme C pouvait renvoyer un exit code, qui était alors interprété par l'appelant. Dans le .bat que je montre, il n'y a que de l'affichage (pas très utile, le programme c aurait pu le faire), mais l'affichage pourrait être remplacé par un appel à un autre programme. Ça s'exécute sous cmd.exe (windows) et les deux programmes (le batch et l'exe du C compilé --- prm.exe dans le cas présent) doivent se trouver dans le même répertoire. Je rappelle que ce n'est qu'un bête exemple. C'est évidemment le .bat qui doit être appelé, avec un paramètre.
Il me semble que le standard C dit (ou disait dans une version) que le "return 0" est implicite dans main, ce qui en fait un cas particulier pour le compilateur. Bravo les gars. Vous comprenez, ça aurait été trop dur d'exiger d'ajouter un return dans le main de chaque programme pour le rendre portable.
Pour rappel, le souci du comité de normalisation pour les premières versions de la norme, c'était d'autoriser officiellement toutes les idées qui étaient passées par la tête des principaux vendeurs de compilateurs (et par ailleurs membres du comité), y compris quand elles étaient contradictoires. Par exemple les chars signés ou pas par défaut. Ce qui donne un langage irrémédiablement infesté de comportements indéfinis et/ou laissés dépendants de l'implémentation
- Edité par michelbillaud 30 septembre 2022 à 5:19:07
J'ignorais pour le code, voici le programme que j'ai fait grâce aux différentes réponses données ici, et qui est maintenant au point. Il se nomme carre.c
Ensuite, j'ai créé un makefile contenant l'instruction de compilation suivie de l'exécution.
J'ai lancé make, et là, si je remplace return 0 par return 1 dans carre.c, j'obtiens bien une notification d'erreur, sans empêcher toutefois le programme de se dérouler.
makefile.
carre:
gcc carre.c -o carre.out
./lancez
puis lancez (contenu ci-dessous), que j'ai rendu exécutable par un chmod -x lancez.
./carre.out les framboises sont encore vertes
Ce programme montre comment nous pouvons utiliser la fonction main en l'appelant avec les paramètres arc et *argh[], et comment nous pouvons récupérer sa valeur avec le return.
Ces explications manquent souvent dans les cours sur le langage C qui traitent de choses plus générales.
- Edité par michelcapelle 30 septembre 2022 à 20:10:32
Le Tout est souvent plus grand que la somme de ses parties.
yasakani no magatama
yasakani no magatama
Le .bat
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent