PDA

View Full Version : [C]=exit


mercury841
29-06-2006, 15:01
Ragazzi ma alla exit si può passare un valore negativo(esempio exit(-1);)???????
Prima ne ero convinto adesso non ne sono più certo poichè se faccio exit(ERR_F), con ERR_F che ho definito come costante uguale a -10, il programma invece di -10 mi ritorna un valore positivo diverso da 10 e di solito maggiore di 100.

ciao

trallallero
29-06-2006, 15:56
Ragazzi ma alla exit si può passare un valore negativo(esempio exit(-1);)???????
Prima ne ero convinto adesso non ne sono più certo poichè se faccio exit(ERR_F), con ERR_F che ho definito come costante uguale a -10, il programma invece di -10 mi ritorna un valore positivo diverso da 10 e di solito maggiore di 100.

ciao
non dipende dalla exit ma dal s.o.
(qui chi ha studiato te lo spiega meglio :) )
immagino che il s.o. memorizzi il valore di uscita in una variabile unsigned.
Cosa fai per vedere il valore della exit ?
per caso:
echo $?

mercury841
29-06-2006, 16:11
per vedere il valore della exit faccio un WEXITSTATUS

trallallero
29-06-2006, 16:13
per vedere il valore della exit faccio un WEXITSTATUS
ma son l'unico a "lavorare" su unix ? :muro:
"lavorare" tra apici perché é un pó di giorni
che non ho 'na mazza da fare :rolleyes:

71104
29-06-2006, 16:34
immagino che il s.o. memorizzi il valore di uscita in una variabile unsigned. più che da dove lo memorizza dipende dall'API che ti permette di ritrovarlo: GetExitCodeProcess infatti usa un DWORD (che è unsigned) ma non è un grosso problema, basta un cast

andbin
29-06-2006, 16:37
il programma invece di -10 mi ritorna un valore positivo diverso da 10 e di solito maggiore di 100.Sì, ci sono dei limiti sul valore del codice di stato di un processo e dipendono da come il sistema operativo lo gestisce e memorizza.

Sui sistemi Linux ad esempio il codice di stato viene memorizzato in un byte senza segno, quindi il range è 0 ... 255. Su Windows in questo momento non mi ricordo (non lo uso praticamente mai il codice di stato su Win :p ).

Se stai lavorando su Linux, prova ad esempio dalla shell:
(exit -10); echo $?
stampa 246

(exit 260); echo $?
stampa 4

trallallero
29-06-2006, 16:39
più che da dove lo memorizza dipende dall'API che ti permette di ritrovarlo: GetExitCodeProcess infatti usa un DWORD (che è unsigned) ma non è un grosso problema, basta un cast
se usa un unsigned una volta che ci ha inserito il valore ha perso il valore vero.
Cosa intendi per castarlo ?

trallallero
29-06-2006, 16:40
Sì, ci sono dei limiti sul valore del codice di stato di un processo e dipendono da come il sistema operativo lo gestisce e memorizza.

Sui sistemi Linux ad esempio il codice di stato viene memorizzato in un byte senza segno, quindi il range è 0 ... 255. Su Windows in questo momento non mi ricordo (non lo uso praticamente mai il codice di stato su Win :p ).

Se stai lavorando su Linux, prova ad esempio dalla shell:
(exit -10); echo $?
stampa 246

(exit 260); echo $?
stampa 4

almeno questo é uguale a Sun :)

71104
29-06-2006, 16:41
se usa un unsigned una volta che ci ha inserito il valore ha perso il valore vero.
Cosa intendi per castarlo ? prova questo:

int main() {
signed long l = -5;
unsigned long ul = l;
printf("%d %d %d\n", l, ul, (signed long)ul);
return 0;
}

trallallero
29-06-2006, 16:45
prova questo:

int main() {
signed long l = -5;
unsigned long ul = l;
printf("%d %d %d\n", l, ul, (signed long)ul);
return 0;
}

m'hai tolto una certezza :muro:
in effetti non ho mai provato ma mi sembrava logico
che perdesse il segno e il valore originale :D

71104
29-06-2006, 16:52
e secondo te allora quel programma cosa doveva stampare? :p

trallallero
29-06-2006, 16:56
e secondo te allora quel programma cosa doveva stampare? :p
-5 ? ?
? = "non lo so", ovviamente ;)