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)