В текущих версиях NSAssert()
используются переменные макросы препроцессора, т. Е. __VA_ARGS__
.Поскольку макросы с переменным числом аргументов являются функцией C99, я предполагаю, что более старые версии SDK не допускали переменных аргументов в NSAssert()
, следовательно, необходимы NSAssert1()
, NSAssert2()
и т. Д.
Если выпопробуйте скомпилировать
NSAssert(0, @"%@%@", @"foo", @"bar");
, используя -std=c89
или -ansi
(ISO C90, более старая версия C, которая не поддерживает переменные макросы), вы получите ошибку компилятора:
error: too many arguments provided to function-like macro invocation
NSAssert(0, @"%@%@", @"foo", @"bar");
Чтобы этот код компилировался с -std=c89
или -ansi
, вам нужно использовать NSAssert2()
:
NSAssert2(0, @"%@%@", @"foo", @"bar");