Які значення x і y спричинить збій з деякими компіляторами C?
int f(int x, int y) {
return (y==0) ? 0 : (x/y);
}
Які значення x і y спричинить збій з деякими компіляторами C?
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
Після додавання головоломки на пісочному майданчику він через кілька секунд знаходить відповідь, такий самий, як відповідь ерегонів. (натиснути запитувати pex)
Примітка: це робиться в C #, але мова не дуже актуальна.
(x/y)
і знати , що INT_MIN
, -1
, і 0
т.д., всі проблемні випадки для цього виразу, і спробувати перепроектувати спосіб отримання цих значень в момент оцінки.