调用一个宏

Sha*_*din 0 c iphone objective-c ios

我有以下宏:

#define testMethod(a, b) \
        if (a.length > b.length) \
            return a; \
        return b;
Run Code Online (Sandbox Code Playgroud)

当我尝试用它来调用它时:

NSString *s = testMethod(@"fir", @"sec");
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

"Excepted ";" at end of declaration"

为什么?

unw*_*ind 7

if是一种陈述,而不是一种表达.它不能return是那样的价值.

你可能意味着:

#define testMethod(a, b) ((a).length > (b).length ? (a) : (b))
Run Code Online (Sandbox Code Playgroud)

围绕右侧参数的额外括号是常见的,可以保护您免受意外的与优先级相关的事件的影响.

还要注意,因为上面是通过文本替换进行预处理的,所以它可能会构造比等效函数更多的对象.