, ni float f = 0.0;
ise,
ve return(f ? 1 : 0);
ile return(0.0 ? 1 : 0);
değiştirilmesi.
Çıktı NIL
. Bu kod çıkışları Visual Studio kullanarak, 32-bit Windows makinesindekayan nokta sabit bir karşılaştırma - (0.0 1: 0) Aşağıdaki örnekte
/* file main.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
cl -W4 -MTd -O2 -TC main.c -Fetest */
#include <stdio.h>
int my_func(void)
{
/* float f = 0.0; */
return(0.0 ? 1 : 0);
}
int main(void)
{
printf("%s\n", (my_func() ? "ONE" : "NIL"));
return 0;
}
: Burada
benim kodudurONE
- Neden
my_func()
döner değertrue
(1)? - C derleyicisi bu ifadeyi
(0.0 ? 1 : 0)
nasıl yorumluyor?
Bu aslında karşılaştığınız gerçek bir dünya mıdır? Gerçek kodda yapabileceğiniz şey bu mu? :-) – paxdiablo
Sadece aynı kodu çalıştırdım ve "NIL" aldım – John
Sadece karanlıkta bir çekim - belki de derleyiciniz, kesiksiz olarak hex değerlerini karşılaştırıyor? ex. (int) 0, 0x000000'e eşdeğerdir, ancak kayan nokta kesinliğiyle, büyük olasılıkla bu tam değere iniş yapmazsınız – John