2009/07/23

[objective-c]CGFloat型について

夜中に、CoreGraphicsフレームワークのCGRectMake関数を使う機会があったのですが、その中で、コールする際の引数の型が、CGFloat型と記載されていたのですが、おそらくfloat型だと思うんだけど、もし違っていたら、とか、本当にfloat型なのかと疑ってしまうと、どーしても気になってしまい(本当は気にしなくてもいいかもしれないのだが)、どのような型なのか気になって、ぐぐってみたところ、プログラマメモ2: CGPointとか。あとNSLogとか。で、「float型」と記載されていました。

ただ上のリンクは、どこからfloat型と判断したのかが記載されていなくて、もうちょいぐぐってみると、こちらのサイトで「CGGeometry Reference」に書いてあり、実際にリファレンスを当たってみると、きちんとした定義がやはりない。

おそらく、判断された理由として、同リファレンスの最後の
CGFLOAT_MIN
CGFLOAT_MAX
CGFLOAT_IS_DOUBLE
の定数定義(厳密に言えば、C言語のマクロなのですが)があるのですが、その定義を読まれて判断されたのではないかと推測。

いずれにせよ、2件、float型となっているので、ちょっとまだ気持ち悪いがfloat型と判断して、アプリ開発をすすませていきたい。

2 件のコメント:

  1. /System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGBase.h

    #if defined(__LP64__) && __LP64__
    typedef double CGFloat;
    #define CGFLOAT_MIN DBL_MIN
    #define CGFLOAT_MAX DBL_MAX
    #define CGFLOAT_IS_DOUBLE 1
    #else /* !defined(__LP64__) || !__LP64__ */
    typedef float CGFloat;
    #define CGFLOAT_MIN FLT_MIN
    #define CGFLOAT_MAX FLT_MAX
    #define CGFLOAT_IS_DOUBLE 0
    #endif /* !defined(__LP64__) || !__LP64__ */
    #define CGFLOAT_DEFINED 1

    マクロで分岐するため、環境によって double、float になります。
    wiki の方の説明で float(double)とあるのは、それを謂わんとしているのだと思われます。

    http://developer.apple.com/Mac/library/documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html

    Apple の Reference ではしっかりと 32bit/64bit と註が附いているので、32 bitで動いているときは float と判断していいでしょうね。

    返信削除
  2. コメントありがとうございます。

    確かにヘッダーファイルは直接参照できるので、そちらで確認すればよかったんですね!!

    もっと細かいところまでリファレンスを読まないといけないですね。。。><。。

    返信削除