4

方法簽名是裏面...如何訪問va_list的後續塊

- (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的哼唧約argsSOME_BLOCK ... Cannot refer to declaration with an array type inside block。爲什麼不?這是「在範圍內」,不是?試過__block va_list無濟於事。建議嗎?理由?

回答

5

va_list是一個不透明的類型,依賴於實現和平臺相關。這可能是因爲你的特定系統被實現爲某種陣列。塊不能捕獲數組類型的變量。 C標準對va_list的使用施加了某些限制,但沒有明確提及任何塊的問題。

如果您確信該塊將這一功能的一生中運行(這否則必須無妨;因爲args只有va_startva_end之間有意義的),那麼一個解決方案是創建另一個變量是va_list *,設置到&args,然後在需要使用它時捕獲並解引用它。

+0

這是我能找到的最好的解決方案。所有其他問題都充滿答案而沒有解決方案。連接這一個。 –