4

NSLog()可変引数を受け入れるようにマクロを機能させようとしています。以下のコードは解析の問題を引き起こします。

これを定義する正しい方法は何ですか?

#define TF_CHECKPOINT(f, ...) \
do { \
NSString *s = [[NSString alloc] initWithFormat:f arguments:__VA_ARGS__] autorelease]; \
[TestFlight passCheckpoint:[NSString stringWithFormat:@"%@: %@", [self class], s]]; \
} while (0)
4

1 に答える 1

8

autoreleaseメッセージの開きかっこを忘れました。

さらに-[NSString initWithFormat:arguments:]va_list引数が__VA_ARGS__必要ですが、渡されたすべての引数に置き換えられます。-[NSString initWithFormat:]ここでは、またはを使用する必要があります+[NSString stringWithFormat:]

最後に、接頭__VA_ARGS__##. こうすることで、引数がない場合は直前のコンマが削除されます。

これを試して:

#define TF_CHECKPOINT(f, ...) \
do { \
NSString *s = [NSString stringWithFormat:(f), ##__VA_ARGS__]; \
[TestFlight passCheckpoint:[NSString stringWithFormat:@"%@: %@", [self class], s]]; \
} while (0)
于 2012-08-03T08:12:14.257 に答える