[英]How can a non-variadic function accept different number of arguments (than with what it is defined)?
[英]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.