簡體   English   中英

是否可以在C中具有可變參數函數且沒有非可變參數?

[英]Is it possible to have a variadic function in C with no non-variadic parameter?

我有以下功能:

void doStuff(int unusedParameter, ...)
{
    va_list params;
    va_start(params, unusedParameter);
    /* ... */
    va_end(params);
}

作為重構的一部分,我想刪除未使用的參數,而不另行更改函數的實現。 據我所知,當你沒有要引用的最后一個非變量參數時,不可能使用va_start 有沒有辦法解決?

背景:它實際上是一個C ++程序,所以我可以使用這里建議的一些運算符重載魔法,但我希望此時不必更改接口。

現有函數通過要求變量參數列表以空值終止並掃描NULL來完成其工作,因此它不需要一個前導參數來告訴它有多少參數。

在回應評論:我沒有刪除未使用的參數,但我會做到這一點,如果有一個干凈的方式來做到這一點。 我希望有一些我想念的簡單。

在GCC中,您有一個解決方法:您可以定義具有可變數量參數的宏,然后在擴展中添加虛擬參數:

#define doStuff(...) realDoStuff(0, __VA_ARGS__)

您可以選擇保持原樣並使用va_list ,別名(如果它是GCC),或其他人指出的,或者執行exec(2)接口的行 - 傳遞一個需要NULL終止符的指針數組:

/* \param args  NULL-terminated array of
 *              pointers to arguments.
 */
void doStuff( void* args[] );

無論哪種方式,重構接口以某種方式利用類型系統會更好 - 可能在使用的確切參數類型上重載:

void doStuff( int );
void doStuff( const std::string& );
void doStuff( const MyFancyAppClass& );

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM