绝对值函数"fabsf"给定类型为"double"的参数,但具有类型为"float"的参数,这可能会导致值截断?



给定此代码示例:

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,因此发出警告。

相关内容

最新更新