Które wartości xiy spowodują awarię niektórych kompilatorów C?
int f(int x, int y) {
return (y==0) ? 0 : (x/y);
}
Które wartości xiy spowodują awarię niektórych kompilatorów C?
int f(int x, int y) {
return (y==0) ? 0 : (x/y);
}
Odpowiedzi:
-2147483648 (INT_MIN) i -1
#include <stdio.h>
#include <limits.h>
int f(int x, int y) {
return (y==0) ? 0 : (x/y);
}
int main() {
int r = f(INT_MIN, -1);
printf("%d\n", r);
return 0;
}
$ gcc -Wall division.c && ./a.out # => zsh: wyjątek zmiennoprzecinkowy ./a.out
Prawidłowa odpowiedź jest już podana, ale od razu pomyślałem o Microsoft Pex .
Pex automatycznie generuje pakiety testowe o wysokim pokryciu kodu. Bezpośrednio z edytora kodu Visual Studio, Pex znajduje interesujące wartości wejściowych i wyjściowych twoich metod, które możesz zapisać jako mały pakiet testowy z dużym pokryciem kodu. Microsoft Pex to dodatek Visual Studio do testowania aplikacji .NET Framework
Po dodaniu łamigłówki na stronie piaskownicy znajduje odpowiedź w ciągu kilku sekund, tak samo jak odpowiedź Eregons. (kliknij zapytaj pex)
Uwaga: robi to w C #, ale język nie jest tak naprawdę istotny.
(x/y)
i wiedzieć, że INT_MIN
, -1
, 0
itd. Są wszystkie przypadki problem dla tego wyrażenia, i starają się odwrócić inżynier sposób wytwarzania tych wartości w czasie oceny.