cóż, przeszukałem artykuły o SIGFPE, następnie napisałem kilka testów, ale jego zachowanie jest dziwne. Następnie muszę opublikować to tutaj, aby poprosić o pomoc. Czy GCC/G ++ lub ISO C++ jasno określają, co się stanie, jeśli podzielimy przez zero?co robi program obsługi C/C++ SIGFPE?
1) Szukałem artykuł: Division by zero does not throw SIGFPE sames to wyjście jest inf
2) Gdybym przepisać jak:
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;
}
następnie signal_handler nie będzie się dzieje. ale jeśli odkomentuję linię, wtedy signal_handler będzie nadal wywoływał.
Czy ktoś może to wyjaśnić?
Integer dzielenie przez zero, nadal budzi 'SIGFPE' (floating point error), ale zmiennoprzecinkowych dzielenie przez zero daje nieskończoność jako odpowiedź. –
'int c = 0; int d = b/c; '? co oznacza "b/0"? – billz
Nie reprodukuję cię tylko: Otrzymuję sygnał tylko raz, a następnie program wychodzi, z lub bez 'printf'. Jeśli dodaję 'signal (SIGFPE, (* signal_handler));' wewnątrz procedury obsługi sygnału, to ja odtwarzam. Linux 3.10, gcc 4.7.3. –