给定此代码示例:
CGFloat a = 1;
CGFloat b = 2;
CGFloat c = fabsf(a-b);
当前的Xcode测试版编译器向我发出以下警告:
Absolute value function 'fabsf' given an argument of type 'double' but has parameter of type 'float' which may cause truncation of value
为什么?
您可以使用fabs
而不是fabsf
。
链接
我看到,代码使用普通的float
类型。当我寻找CGFloat
的定义时,我发现了这个:
#if defined(__LP64__) && __LP64__
# define CGFLOAT_TYPE double
# define CGFLOAT_IS_DOUBLE 1
# define CGFLOAT_MIN DBL_MIN
# define CGFLOAT_MAX DBL_MAX
#else
# define CGFLOAT_TYPE float
# define CGFLOAT_IS_DOUBLE 0
# define CGFLOAT_MIN FLT_MIN
# define CGFLOAT_MAX FLT_MAX
#endif
typedef CGFLOAT_TYPE CGFloat;
所以CGFloat
现在实际上是double
,因此发出警告。