Hangi x ve y değerleri bazı C derleyicilerinde kilitlenmeye neden olur?
int f(int x, int y) {
return (y==0) ? 0 : (x/y);
}
Hangi x ve y değerleri bazı C derleyicilerinde kilitlenmeye neden olur?
int f(int x, int y) {
return (y==0) ? 0 : (x/y);
}
Yanıtlar:
-2147483648 (INT_MIN) ve -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 -Duvar bölmesi.c && ./a.out # => zsh: kayan nokta istisnası ./a.out
Doğru cevap zaten verildi, ancak hemen Microsoft Pex'i düşündüm .
Pex otomatik olarak yüksek kod kapsamına sahip test paketleri üretir. Doğrudan Visual Studio kod düzenleyicisinden Pex, yöntemlerinizin ilginç giriş-çıkış değerlerini bulur ve yüksek kod kapsamına sahip küçük bir test paketi olarak kaydedebilirsiniz. Microsoft Pex, .NET Framework uygulamalarını sınamak için bir Visual Studio eklentisidir
Sonra bulmaca ekleyerek sandbox sitedeki, birkaç saniye içinde cevap, eregons cevap olarak aynı bulur. (pex'e sor)
Not: C # ile yapar, ancak dil gerçekten alakalı değildir.
(x/y)
ve biliyoruz INT_MIN
, -1
, 0
vb o ifadesi için tüm sorun durumlardır ve değerlendirilmesi sırasında bu değerleri üretmek için bir yol tersine mühendislik deneyin.