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
最大サイズの配列を使用して、必要なものだけを使用する必要があります。