bene, ho cercato gli articoli su SIGFPE, poi ho scritto alcuni test ma il comportamento è strano. Quindi devo postarlo qui per chiedere aiuto. GCC/G ++ o ISO C++ definiscono chiaramente cosa succede se dividi per zero?cosa gestisce SIGFPE C/C++?
1) I cercato l'articolo: Division by zero does not throw SIGFPE esso Sameš l'uscita è inf
2) Se riscrivo come la seguente:
void signal_handler (int signo) {
if(signo == SIGFPE) {
std::cout << "Caught FPE\n";
}
}
int main (void) {
signal(SIGFPE,(*signal_handler));
int b = 1;
int c = 0;
int d = b/c;
//fprintf(stderr,"d number is %d\n,d);
return 0;
}
poi signal_handler no succede. ma se decommento la riga
//fprintf(stderr,"d number is %d\n,d);
quindi signal_handler continua a chiamare.
qualcuno può spiegarlo?
Integer divisione per zero solleva ancora 'SIGFPE' (errore di virgola mobile), ma floating point divisione per zero cede l'infinito come risposta. –
'int c = 0; int d = b/c; '? che significa 'b/0'? – billz
Non ti riproduco in modo esatto: ottengo il segnale solo una volta e poi il programma termina, con o senza 'printf'. Se aggiungo il segnale '(SIGFPE, (* signal_handler));' all'interno del gestore del segnale, quindi vi riproduco. Linux 3.10, gcc 4.7.3. –