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
,然后捕获它并在需要时取消引用。这是我能找到的最佳解决方案。所有其他问题都有答案,没有答案。链接这个。