Quali valori di xey causeranno un arresto anomalo con alcuni compilatori C?
int f(int x, int y) {
return (y==0) ? 0 : (x/y);
}
Quali valori di xey causeranno un arresto anomalo con alcuni compilatori C?
int f(int x, int y) {
return (y==0) ? 0 : (x/y);
}
Risposte:
-2147483648 (INT_MIN) e -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: eccezione in virgola mobile ./a.out
La risposta giusta è già stata data, ma ho pensato subito a Microsoft Pex .
Pex genera automaticamente suite di test con un'elevata copertura del codice. Direttamente dall'editor di codice di Visual Studio, Pex trova interessanti valori di input-output dei tuoi metodi, che puoi salvare come una piccola suite di test con copertura del codice elevata. Microsoft Pex è un componente aggiuntivo di Visual Studio per il test di applicazioni .NET Framework
Dopo aver aggiunto il tuo puzzle nel sito sandbox, trova la risposta in pochi secondi, lo stesso della risposta eregons. (fai clic su chiedi a pex)
Nota: lo fa in C #, ma la lingua non è molto rilevante.
(x/y)
e sapere che INT_MIN
, -1
, 0
ecc, sono tutti i casi problematici per questa espressione, e cercare di decodificare un modo per produrre questi valori al momento della valutazione.