![]() |
| |||||||
| S'inscrire | FAQ | Membres | Calendrier | Recherche | Messages du jour | Marquer les forums comme lus |
![]() |
| LinkBack | Outils de la discussion | Modes d'affichage |
| |||
| In article <slrngbdeco.5so.Marc.Boyer***ubu.enseeiht.fr>, Marc Boyer <Marc.Boyer***enseeiht.yahoo.fr> wrote: >> Pour un main() sans return, l'accolade terminale du bloc de définition >> de la fonction doit jouer le rôle d'un return sec mais quid de la valeur >> de retour ? > > De tête, ce doit être 0, la valeur de EXIT_SUCCESS. A confirmer. Faux. C'est le cas en C++, mais pas en C, et il y a explicitement un paragraphe de la norme qui explicite la difference (sachant qu'en C++, main n'est de toutes facons PAS une fonction comme les autres). Comme le dit candide, c'est un `retour sec'. Sur la plupart des archis, les retours de valeurs entieres simples se font dans un registre du processeur. On recupere alors la valeur qui se trouvait dans le registre au moment du retour de la fonction, c'est-a-dire n'importe quoi. Et pour faire plaisir a candide, qui sinon va encore fait chier que lui, tout ce qui l'interesse, c'est la norme, et pas les mecanismes de telle machine en particulier, la norme classe explicitement tout ceci en undefined behavior... bref, c'est une faute si on a un des prototypes standards de main. Le seul cas ou ca n'en est pas une, c'est que la norme prevoit egalement que main() peut disposer de prototypes non-standards (qui doivent etre definis par l'implementation). C'est prevu pour autoriser les appels a la Unix, ou il traine un 3e parametre qui permet d'acceder a l'environnement, mais ca peut permettre a des implementation de definir un void main() (qui rappelons-le, n'a rien a faire dans un enseignement du C standard et portable). |
| | ||||
| ||||
| |
| |||
| In article <pxbhc95ytge.fsf***news.bourguet.org>, Jean-Marc Bourguet <jm***bourguet.org> wrote: >espie***lain.home (Marc Espie) writes: > >> In article <slrngbdeco.5so.Marc.Boyer***ubu.enseeiht.fr>, >> Marc Boyer <Marc.Boyer***enseeiht.yahoo.fr> wrote: >> >> Pour un main() sans return, l'accolade terminale du bloc de définition >> >> de la fonction doit jouer le rôle d'un return sec mais quid de la valeur >> >> de retour ? >> > >> > De tête, ce doit être 0, la valeur de EXIT_SUCCESS. A confirmer. >> >> Faux. >> >> C'est le cas en C++, mais pas en C, et il y a explicitement un paragraphe >> de la norme qui explicite la difference (sachant qu'en C++, main n'est >> de toutes facons PAS une fonction comme les autres). > >C99 s'est aligne sur le C++: > >5.1.2.2.3 Program termination > >1 If the return type of the main function is a type compatible with int, a >return from the initial call to the main function is equivalent to calling >the exit function with the value returned by the main function as its >argument;10) reaching the } that terminates the main function returns a >value of 0. If the return type is not compatible with int, the termination >status returned to the host environment is unspecified. Donc, d'ici 10 ans, ca sera utilisable. Pour info, le `mode' par defaut du gcc que j'ai sous la main est conforme a C90, pas C99... si je specifie -std=c99, effectivement, ca fonctionne... |
| |||
| In article <m2d4jtdlsj.fsf***minuetto.depot.rail.eu.org>, Erwan David <erwan***rail.eu.org> wrote: >espie***lain.home (Marc Espie) écrivait***: > >> >> Donc, d'ici 10 ans, ca sera utilisable. Pour info, le `mode' par defaut >> du gcc que j'ai sous la main est conforme a C90, pas C99... si je specifie >> -std=c99, effectivement, ca fonctionne... > >Et attention, si on va dans l'embarqué on trouve du > >"The latest release of MIPS® SDE is 6.06.00 based on gcc3.4." Tu sais, on est toujours sur gcc 3.3 sur OpenBSD... entre autres parce qu'on trouve que les versions plus recentes se foutent du monde cote vitesse de compilation et consommation memoire. |
| |
| |
![]() |
| Tags: dbuter, quel, tutoriel |
| Outils de la discussion | |
| Modes d'affichage | |
| |