Какие значения x и y вызовут сбой некоторых компиляторов Си?
int f(int x, int y) {
return (y==0) ? 0 : (x/y);
}
Какие значения x и y вызовут сбой некоторых компиляторов Си?
int f(int x, int y) {
return (y==0) ? 0 : (x/y);
}
Ответы:
-2147483648 (INT_MIN) и -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: исключение с плавающей запятой ./a.out
Правильный ответ уже дан, но я сразу подумал о Microsoft Pex .
Pex автоматически генерирует тестовые наборы с высоким охватом кода. Прямо из редактора кода Visual Studio Pex находит интересные значения ввода-вывода ваших методов, которые вы можете сохранить в виде небольшого набора тестов с высоким охватом кода. Microsoft Pex - это надстройка для Visual Studio для тестирования приложений .NET Framework
После добавления вашей головоломки в сайт с песочницей, он находит ответ через несколько секунд, так же, как и ответ eregons. (нажмите спросить Pex)
Примечание: он делает это в C #, но язык не очень актуален.
(x/y)
и знать , что INT_MIN
, -1
, и 0
т.д., все проблемные случаи для этого выражения, и попытаться перепроектировать способ получения этих значений в момент оценки.