2014-03-07 69 views
1

我想傳遞一個函數指針作爲va_arg下的一些參數的一部分。我嘗試使用void *通配符,之後再進行類型轉換,但是出現錯誤。傳遞函數指針作爲參數使用va_args

fn_ptr = va_arg(*app, (void*)); 

一個人如何通過一個函數指針,作爲參數傳遞給使用va_args另一個函數?

回答

1

只需將函數指針的類型傳遞給va_arg即可。例如:

#include <stdio.h> 
#include <stdarg.h> 

void foo() 
{ 
    printf("foo\n"); 
} 

typedef void(*foo_ptr)(); 

void bar(unsigned count, ...) 
{ 
    va_list args; 
    va_start(args, count); 
    unsigned i = 0; 

    for (; i < count; ++i) { 
     foo_ptr p = va_arg(args, foo_ptr); 
     (*p)(); 
    } 
    va_end(args); 
} 

int main() 
{ 
    bar(2, &foo, &foo); 
} 

Live demo

+0

很好,謝謝!意識到在'va_arg'的定義中,第二個參數不能被括起來,即'void *'而不是'(void *)'來工作。 – jhtong

+0

@jhtong按照標準[不允許](http://stackoverflow.com/a/13697654/241631)從函數指針轉換爲'void *',反之亦然。 – Praetorian