是否可以在 Objective-C 中使用这样的东西:
#define number_of_items 10
然后将其用作:
int arr[number_of_items];
是否可以在 Objective-C 中使用这样的东西:
#define number_of_items 10
然后将其用作:
int arr[number_of_items];
是的,假设您的意思是Objective C。它几乎是“正确”C 的超集,所以这完全没问题。在 C 和 C++ 中也可以。
您可以看到它在以下脚本中有效:
pax> cat qq.m
#import <objc/Object.h>
// First method.
#define number_of_items 10
int arr[number_of_items];
// Second method.
#define NUMBER_OF_ROWS 10
@interface test : Object{ int xyzzy[NUMBER_OF_ROWS]; }
@end;
pax> vi qq.m ; gcc -o qq.o -c qq.m -lobjc
pax> # no errors occurred
而且,现在我们终于看到了您实际使用的内容:
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define NUMBER_OF_ROWS_ (IS_IPAD? 18: 18)
NUMBER_OF_ROWS_
不是常数,因为它取决于函数的返回值UI_USER_INTERFACE_IDIOM()
。
换句话说,它不能在编译时计算。这就是您收到错误的原因。您可以通过编译以下代码来看到这一点:
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define NUMBER_OF_ROWS_ (IS_IPAD ? 18: 20)
int UI_USER_INTERFACE_IDIOM(void) {return 20;}
int UIUserInterfaceIdiomPad;
int main (void) {
int arr[NUMBER_OF_ROWS_];
return 0;
}
在 下gcc --pedantic
,你得到:
qq.m: In function ‘main’:
qq.m:8: warning: ISO C90 forbids variable length array ‘arr’
您要么需要使用动态可调整的集合,NSMutableArray
要么使用所需的最大大小的数组,并且只使用您需要的。