6

所以我正在使用 XCTest 进行单元测试,并且遇到了一个小问题。

当我编写带有速记数组声明和方法调用的 XCTAssert 语句时,Xcode 中会出现语法错误:

XCTAssert([self hasStrings:@[ @"foo", @"bar" ]]);

在 Xcode 编译错误中:

Expected identifier or '('

但是,如果我在表达式周围添加更多括号,它将起作用:

XCTAssert(([self hasStrings:@[ @"foo", @"bar" ]]));

这与我的某些语法不允许传递给宏有关吗?(假设 XCTAssert 是一个宏)

4

1 回答 1

7

XCTAssert是一个带有可变参数列表的宏:

#define XCTAssert(expression, format...) \
    _XCTPrimitiveAssertTrue(expression, ## format)

在您的第一种形式中,预处理器解释

[self hasStrings:@[ @"foo", @"bar" ]]

作为两个宏参数,用逗号分隔。

于 2013-12-19T20:58:18.530 回答