if文の条件式にfloatの0.0を指定したときの挙動。
あ、厳密には0.0fって書かなきゃいけなかったんだっけ。ま、いいか。。。
$ uname -mrsv
Darwin 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386
$ gcc --version
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ cat ./floatif.c
#include <stdio.h>
int main(int argc, char *argv[]){
float x = 0.0;
float y = 0.1;
if(x){
puts("x is true");
}else{
puts("x is false");
}
if(y){
puts("y is true");
}else{
puts("y is false");
}
return 0;
}
$ gcc -o fif ./floatif.c
$ ./fif
x is false
y is true
0.0でも偽値なのね。
C言語が式のブール値を必要とする場合(if、while、forやdo文におい て、また&&、||、!、?:演算子と共に使う場合)、0と比較して等しい 場合は偽の値が産み出され、その他の場合は真が産み出される。すな わち
if(expr)
と書いたらいつも、「expr」がどんな式かにかかわらずコンパイラは 必ず
if((expr) != 0)
と書かれたように基本的には動作する。
C FAQ 5
なるほど!
こうやって考えればいいのか。
tags: c
Posted by NI-Lab. (@nilab)