"在固定args函数中使用的va_start"异常?

dav*_*ode 2 macros xcode objective-c c-preprocessor

我正在尝试使用varargs创建一个简单的宏,但我得到"va_start在固定args的函数中使用",我不明白为什么以及我错在哪里.代码如下:

#define FOO(obj, ...) \
    va_list args; \
    va_start(args, obj); \
    NSString *currentObject; \
    while ((currentObject = va_arg(args, NSString*)) != nil) { \
        NSLog(@"string: %@", currentObject); \
    } \
    va_end(args);
Run Code Online (Sandbox Code Playgroud)

Stu*_*ook 5

va_list类型及其相关操作是可变参数的功能.它们不适用于可变参数宏,它使用__VA_ARGS__和工作方式有些不同.

在这个例子中,我看不出任何使用宏的理由; 你应该只使用一个函数.如果事实证明你确实需要一个宏,你可能最终必须__VA_ARGS__作为参数传递给一个可变参数函数,然后可以解压缩参数并执行进一步的工作.