Syntax 如何访问后续块中的va_列表

Syntax 如何访问后续块中的va_列表,syntax,scope,objective-c-blocks,variadic-functions,variadic,Syntax,Scope,Objective C Blocks,Variadic Functions,Variadic,方法签名是 - (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

方法签名是

- (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
<代码>无法引用块内具有数组类型的声明
。为什么不呢?它在“范围内”,不是吗?尝试了
\u块va\u列表
,但无效。建议?理由

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


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

这是我能找到的最佳解决方案。所有其他问题都有答案,没有答案。链接这个。