Ios 如何定义CFIndex的最大值和最小值?
我尝试定义如下宏:Ios 如何定义CFIndex的最大值和最小值?,ios,macros,core-foundation,Ios,Macros,Core Foundation,我尝试定义如下宏: #import <CoreFoundation/CFBase.h> #if __LLP64__ #define CFIndexMax LONG_LONG_MAX; #define CFIndexMin LONG_LONG_MIN; #else #define CFIndexMax LONG_MAX; #define CFIndexMin LONG_MIN; #endif #导入 #如果__ #定义CFIndexMax LONG\u LONG\u MAX; #定
#import <CoreFoundation/CFBase.h>
#if __LLP64__
#define CFIndexMax LONG_LONG_MAX;
#define CFIndexMin LONG_LONG_MIN;
#else
#define CFIndexMax LONG_MAX;
#define CFIndexMin LONG_MIN;
#endif
#导入
#如果__
#定义CFIndexMax LONG\u LONG\u MAX;
#定义CFIndexMin LONG\u LONG\u MIN;
#否则
#定义CFIndexMax LONG_MAX;
#定义CFIndexMin LONG_MIN;
#恩迪夫
但是Xcode总是警告我没有定义\uuuuLLP64\uuu
,这是在CFBase.h
中定义的条件。实际上,编译器定义了\uuuuLLP64\uuuuuuuuuuu
。
如果您再次查看CFBase.h
预处理器逻辑,您将看到它在为64位Windows目标编译时强制定义\uuuuuLLP64\uuuuu
:
#if defined(__WIN64__) && !defined(__LLP64__)
#define __LLP64__ 1
#endif
版权所有(c)1998-20016苹果公司
如果您关心macOS上CGFloat
(甚至CFIndex
类型)的大小,请查看CGBase.h
以了解如何定义:
#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
版权所有(c)2000-2011苹果公司
您可以根据CGFLOAT\u的布尔值DOUBLE
有条件地定义max和minCFIndex
es,该值不会很快改变
最后,我相信Windows是唯一一个在64位运行时中
long
类型大小为32位的操作系统(也就是说,与在64位运行时中为64位的linux和macOS相比)
如果确定要切换到正确的定义,请始终检查是否先在预编译器中定义变量:
#if defined(__LLP64__) & __LLP64__
// conditionally define more stuff
#endif
实际上,编译器定义了\uuuuLLP64\uuuuuu
(或者更可能是\uuuuuuLP64\uuuuuu
)。
如果您再次查看CFBase.h
预处理器逻辑,您将看到它在为64位Windows目标编译时强制定义\uuuuuLLP64\uuuuu
:
#if defined(__WIN64__) && !defined(__LLP64__)
#define __LLP64__ 1
#endif
版权所有(c)1998-20016苹果公司
如果您关心macOS上CGFloat
(甚至CFIndex
类型)的大小,请查看CGBase.h
以了解如何定义:
#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
版权所有(c)2000-2011苹果公司
您可以根据CGFLOAT\u的布尔值DOUBLE
有条件地定义max和minCFIndex
es,该值不会很快改变
最后,我相信Windows是唯一一个在64位运行时中
long
类型大小为32位的操作系统(也就是说,与在64位运行时中为64位的linux和macOS相比)
如果确定要切换到正确的定义,请始终检查是否先在预编译器中定义变量:
#if defined(__LLP64__) & __LLP64__
// conditionally define more stuff
#endif
您的问题是您正在检查
\uuuuuLLP64\uuuuuuu的值,但您想检查\uuuuuuLLP64\uuuuuuuuuuuuuu>的是否存在:
#ifdef __LLP64__
#define CFIndexMax LONG_LONG_MAX;
#define CFIndexMin LONG_LONG_MIN;
#else
#define CFIndexMax LONG_MAX;
#define CFIndexMin LONG_MIN;
#endif
但是,只有Windows使用LLP64模型。您是否计划在Windows上生成此代码?如果不打算,您应该通过消除条件来简化代码。您的问题是,您正在检查\uuuuLLP64\uuuuu>的值,但您想检查\uuLLP64\uuuuuuu>是否存在:
#ifdef __LLP64__
#define CFIndexMax LONG_LONG_MAX;
#define CFIndexMin LONG_LONG_MIN;
#else
#define CFIndexMax LONG_MAX;
#define CFIndexMin LONG_MIN;
#endif
但是,只有Windows使用LLP64型号。您是否计划在Windows上生成此代码?如果没有,您应该通过消除条件来简化代码。我尝试了您的代码,但没有收到任何警告。您的项目规范是什么?针对iPhone 6ssimulator@DejanSkledarI尝试了你的代码,但我没有收到任何警告。什么e您的项目规格?针对iPhone 6ssimulator@DejanSkledar