我尝试定义这样的宏:
#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
但是Xcode始终警告我没有__LLP64_
的定义CFBase.h
是android:configChanges="orientation|keyboardHidden|screenSize"
中的条件定义。
答案 0 :(得分:0)
实际上,编译器定义__LLP64__
(或更可能是__LP64__
)。
如果再次查看CFBase.h
预处理器逻辑,则会在编译64位Windows目标时看到它强制定义__LLP64__
:
#if defined(__WIN64__) && !defined(__LLP64__)
#define __LLP64__ 1
#endif
版权所有(c)1998-20016 Apple Inc.
如果您担心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 Apple Inc.
您可以根据CFIndex
的布尔值有条件地定义最大值和最小值CGFLOAT_IS_DOUBLE
,这不会很快改变。
最后,我相信Windows是64位运行时中唯一大小为long
类型为32位的操作系统(也就是说,与在64位运行时中为64位的linux和macOS相比)
如果您确定您正在启用正确的定义,请始终检查变量是否先在预编译器中定义:
#if defined(__LLP64__) & __LLP64__
// conditionally define more stuff
#endif
答案 1 :(得分:0)
您的问题是,您正在检查__LLP64__
的值,但是您要检查__LLP64__
的存在:
#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上构建此代码?如果没有,您应该通过消除条件来简化您的代码。