Giá trị nào của x và y sẽ gây ra sự cố với một số trình biên dịch C?
int f(int x, int y) {
return (y==0) ? 0 : (x/y);
}
Giá trị nào của x và y sẽ gây ra sự cố với một số trình biên dịch C?
int f(int x, int y) {
return (y==0) ? 0 : (x/y);
}
Câu trả lời:
-2147483648 (INT_MIN) và -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: ngoại lệ điểm nổi ./a.out
Câu trả lời đúng đã được đưa ra, nhưng tôi nghĩ ngay đến Microsoft Pex .
Pex tự động tạo ra các bộ thử nghiệm với độ bao phủ mã cao. Ngay từ trình chỉnh sửa mã Visual Studio, Pex tìm thấy các giá trị đầu vào-đầu ra thú vị của các phương thức của bạn, mà bạn có thể lưu dưới dạng một bộ thử nghiệm nhỏ với độ bao phủ mã cao. Microsoft Pex là một bổ trợ Visual Studio để thử nghiệm các ứng dụng .NET Framework
Sau khi thêm câu đố của bạn vào trang web hộp cát, nó sẽ tìm thấy câu trả lời trong vài giây, giống như câu trả lời của eregons. (bấm hỏi pex)
Lưu ý: nó thực hiện bằng C #, nhưng ngôn ngữ không thực sự phù hợp.
(x/y)
và biết rằng INT_MIN
, -1
, 0
vv là tất cả các trường hợp vấn đề đối với biểu hiện đó, và cố gắng thiết kế đối chiếu một cách để tạo ra những giá trị tại thời điểm đánh giá.