Я только что создал проект 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: isпредполагается, что он разделяет два аргумента макроса, поэтому я использовал foo с двумя аргументами вместо правильного.
Итак, когда я хочу запятую внутри оператора внутри моего макроса, что я могу сделать?
Этот вопрос C ++ предлагает способ поставить несколько круглых скобок () вокруг запятой, что, очевидно, заставляет препроцессор понять, что запятая не является разделителем аргументов макроса.Но, черт побери, я не думаю о том, как это сделать в цели C.