2016-11-28 16 views
3

私はvarargsを一度に複数のポインタを解放する機能にしたいと思っています。主にコードをクリーンアップします。だから私は持っている:最初の引数のない可変引数 - va_startに属するもの?

void free_all(...) { 
    va_list arguments; 
    /* Initializing arguments to store all values after last arg */ 
    // but there are no args! 
    va_start (arguments, ?????); 
    /* we expect the caller to send last argument as NULL **/ 
    void* pointer = va_arg (arguments, void*); 
    while((pointer = va_arg (arguments, void*))!=NULL) { 
     free(pointer); 
    } 
    va_end (arguments);     // Cleans up the list 
} 

だから何を入れてva_start (arguments, ?????)

答えて

3

これは簡単ではありません。常にvarargでない引数を持つ必要があります。あなたの場合

void free_all(void *first, ...); 

が動作する可能性があります。

+0

これは技術的な制限ですか、単に実装されていないものですか? (ここで私は単にそれがどのように動作するのか興味があります) –

+0

それは動作する方法です。そうでなければそれを実装することは不可能です。少なくとも私はそれがそうであると思う。 –

+1

@TomášZato、それは標準IMOの監督です。その余分な引数は、スタックフレームへのフックです。理論的には、それなしで達成することができます。 – StoryTeller

関連する問題