2011-07-20 15 views
1

と誤解されているマクロ内の文の中、私はちょうどXcodeプロジェクトを作成し、次のコードを書いた:カンマがマクロ引数の区切り

#define foo(x) x 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    int n = 666; 
    NSString* string = foo([NSString stringWithFormat: @"%d", n]); 
    NSLog (@"string is %@", string); 
    [self.window makeKeyAndVisible]; 
     return YES; 
} 

私はこれを実行しようとすると、私はエラーの束を取得し、プリプロセッサはstringWithFormat:の後のカンマが2つのマクロ引数を分離するはずであると判断しているため、正しいものの代わりに2つの引数を使ってfooを使用しています。

マクロ内の文の中にコンマを入れたい場合はどうしたらいいですか?

This C++ questionはカンマの周りにいくつかのラウンドparens()を置く方法を示唆しています。これは、プリプロセッサがコンマがマクロの引数の区切りではないことを明らかにします。しかし、私の頭の上から、私は作品を、それを分離する目的C.

+0

余分なカッコを試しましたか? –

+0

代わりにマクロを使用するのではなく、関数を使用しますか?それに失敗すると、foo(x)(x)が機能するかもしれません。 –

答えて

5

があるかもしれません呼び出しが動作します:

NSString* string = foo(([NSString stringWithFormat:@"%d",n])); 
0

でそれを行うための方法を考えてないんだけど、周りに追加の括弧を追加する簡単な方法

NSString* stringBefore = [NSString stringWithFormat:@"%d",n]; 
NSString* string = foo(stringBefore); 
0

してみたNSString *文字列= fooの([NSStringのstringWithFormat:( "%d個"、n)は@]);

それ以外の場合は、うまく動作するカーターの方法を試してみてください。