OVH Cloud OVH Cloud

Code retour d'un pgm C

16 réponses
Avatar
Sébastien BERNARD
Bonjour,

Je travaille sous HP-UX et j'ai un soucis ave le code retour de mon
programme C : ma fonction main est déclarée en "int main(...)" et pourtant
je ne peux retourner que des valeurs positives entre 0 et 255. En tout cas
c'est ce que me dit le script quand j'affiche à l'intérieur de celui-ci le
code retour de mon programme.
Le programme ne plantant pas sur un code retour négatif, le pb vient
peut-être de mon script ? Dans le script j'intercepte le code retour via la
variable $?.

Où est mon erreur ?
Merci de votre aide,
Sébastien B.

6 réponses

1 2
Avatar
Eric Jacoboni
Erwan David writes:


La norme dit que ça doit faire la même chose. Maintenant si la norme
change de manière incompatible elle peut tout aussi bien virer le exit


Vi... J'avais, à tord, fait confiance à un bouquin qui prétendait que
EXIT_SUCCESS valait zéro, ce qui n'est effectivement pas ce que dit la
norme.

--
Éric Jacoboni, né il y a 1363190501 secondes

Avatar
Vincent Lefevre
Dans l'article ,
Erwan David écrit:

Eric Jacoboni écrivait :

Erwan David writes:

Aucun, 0 et EXIT_SUCCESS ont le même effet.


Merci de confirmer... ils ont le même effet actuellement et sur la
plupart des plateformes, mais rien ne dit que ça va durer : donc
renvoyer 0 directement, c'est mal.


La norme dit que ça doit faire la même chose.


Non. Elle dit ceci:

If the value of status is zero or EXIT_SUCCESS, an
implementation-defined form of the status successful
termination is returned.

Dans les deux cas, on considère que le programme se termine avec
succès. Mais rien ne dit qu'il ne peut pas y avoir plusieurs formes
de succès avec certaines implémentations, y compris sous Unix. Ceci
dit, si 0 et EXIT_SUCCESS font des choses différentes avec telle
implémentation, on ne peut pas dire a priori que l'un des choix est
préférable à l'autre.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/> - 100%
validated (X)HTML - Acorn Risc PC, Yellow Pig 17, Championnat International
des Jeux Mathématiques et Logiques, TETRHEX, etc.
Work: CR INRIA - computer arithmetic / SPACES project at LORIA



Avatar
Laurent Wacrenier
Vincent Lefevre <vincent+ écrit:
Dans les deux cas, on considère que le programme se termine avec
succès. Mais rien ne dit qu'il ne peut pas y avoir plusieurs formes
de succès avec certaines implémentations, y compris sous Unix. Ceci
dit, si 0 et EXIT_SUCCESS font des choses différentes avec telle
implémentation, on ne peut pas dire a priori que l'un des choix est
préférable à l'autre.


Sur un système Posix, EXIT_SUCCESS s'évalue en 0.

Avatar
root
On Wed, 06 Aug 2003 07:42:40 +0200, Richard Delorme wrote:

Pour Unix, la norme dit (dans Susv3 pour l'en-tête stdlib.h) :

EXIT_SUCCESS
Successful termination for exit(); evaluates to 0.
^^^^^^^^^^^^^^


Idem. pour Perl (doc du exit) :

" exit EXPR
[...]
If EXPR is omitted, exits with 0 status. The only universally recognized
values for EXPR are 0 for success and 1 for error; other values are
subject to interpretation depending on the environment in which the Perl
program is running."

Avatar
Vincent Lefevre
Dans l'article ,
root écrit:

On Wed, 06 Aug 2003 07:42:40 +0200, Richard Delorme wrote:

Pour Unix, la norme dit (dans Susv3 pour l'en-tête stdlib.h) :

EXIT_SUCCESS
Successful termination for exit(); evaluates to 0.
^^^^^^^^^^^^^^


Idem. pour Perl (doc du exit) :

" exit EXPR
[...]
If EXPR is omitted, exits with 0 status. The only universally recognized
values for EXPR are 0 for success and 1 for error; other values are
subject to interpretation depending on the environment in which the Perl
program is running."


sauf que Perl n'existe pas que sous Unix. Certaines plateformes
pourraient théoriquement avoir besoin d'une conversion valeur d'exit
de Perl -> valeur d'exit du programme C (puisque Perl est écrit en C).

--
Vincent Lefèvre - Web: <http://www.vinc17.org/> - 100%
validated (X)HTML - Acorn Risc PC, Yellow Pig 17, Championnat International
des Jeux Mathématiques et Logiques, TETRHEX, etc.
Work: CR INRIA - computer arithmetic / SPACES project at LORIA


Avatar
kanze
DINH Viêt Hoà wrote in message
news:...

Euh moi j'utilise return pour terminer ma fonction main, c pas bon ?
Je dois plutôt utiliser exit ?


il vaut mieux utiliser exit.


Pourquoi ?

Moi, je travaille surtout en C++, où on préfère éviter exit (qui
n'appelle pas les destructeurs des objets locaux). Mais bien avant,
j'avais l'habitude de retourner de main ; je le trouve plus propre.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16


1 2