绝对值函数'fabsf'给出一个类型为'double'的参数但是有'float'类型的参数可能会导致值截断?

zou*_*oul 8 xcode objective-c

鉴于此代码示例:

CGFloat a = 1;
CGFloat b = 2;
CGFloat c = fabsf(a-b);
Run Code Online (Sandbox Code Playgroud)

当前的Xcode beta编译器给了我这个警告:

Absolute value function 'fabsf' given an argument of type 'double' but has parameter of type 'float' which may cause truncation of value
Run Code Online (Sandbox Code Playgroud)

为什么?

小智 14

你可以用fabs而不是fabsf.

链接


zou*_*oul 7

我看,代码使用普通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;
Run Code Online (Sandbox Code Playgroud)

所以CGFloat现在实际上是一个double,因此警告.

  • 只需使用`fabs`而不是`fabsf`. (2认同)