次のようなマクロ定義の要素数を取得するにはどうすればよいですか。
#define myThings @"A",@"B",@"C",@"D",@"E"
myThingsから答え5を取得する方法は何ですか?
[myThings count]
動作しません...
次のようなマクロ定義の要素数を取得するにはどうすればよいですか。
#define myThings @"A",@"B",@"C",@"D",@"E"
myThingsから答え5を取得する方法は何ですか?
[myThings count]
動作しません...
定義はテキストの文字通りの置換です:それは次のようなコードで機能しますか
[@"A", @"B", @"C" count];
?答えがノーの場合、それは機能しません、そしてここにそれはあなたの問題です。あなたができる
[[NSArray arrayWithObjects: myThings, nil] count];
これは機能するはずですが、この「パターン」を使用することはまったくお勧めしません。
追加
値がいくつあるかを数える別の方法は、次のようになります。
NSString *arr[] = {myThings};
size_t cnt = sizeof(arr)/sizeof(NSString *);
これは、に含まれる要素の数を知るためのCの一般的な方法arr
です。myThings
繰り返しになりますが、文字通り、を使用して定義したものに置き換えられるという事実を強調します。#define
したがって、結果は次のようになります。
NSString *arr[] = {@"A", @"B", @"C", @"D", @"E"};
Add2
「実際に」使用しない場合はarr
、最適化によって削除され、「スペースの無駄」がないことに注意してください。
ただし、別の解決策は、マクロに渡された引数の数をカウントして、CountingMacro(myThings)を5に置き換えることです。この場合、このSOの回答が役立つ可能性があります。