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:
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
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 :)
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
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 ;)
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.