4

方法签名是...

- (void)blahBlahBlah:(NSString*)format, ... NS_FORMAT_FUNCTION(1,2) {

   va_list args; va_start(args,format);

   void(^SOME_BLOCK)(void) = ^{ [Heathens prayToJesusWith:
                           [NSString.alloc initWithFormat:kFMT       
                                                arguments:args];  }; ...
   va_end(args);
}

然而Xcode在args内部抱怨SOME_BLOCK...... Cannot refer to declaration with an array type inside block为什么不?这是“范围内”,不是吗?试过__block va_list无济于事。建议?基本原理?

4

1 回答 1

6

va_list是一种不透明类型,它依赖于实现和平台。可能是在您的特定系统上被实现为某种数组。块不能捕获数组类型的变量。C 标准对 的使用施加了某些限制va_list,但没有明确提及块的任何问题。

如果您确定该块将在此函数的生命周期内运行(否则无论如何它都必须运行;因为args仅在va_startand之间有意义va_end),那么一种解决方案是创建另一个变量,即va_list *设置为&args,然后捕获该变量并取消引用当你需要使用它时。

于 2013-10-08T11:09:19.377 回答