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和min
CFIndex
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和min
CFIndex
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