2013-03-19 41 views
0

我正在創建一個函數,需要傳遞至少2個(兩個)參數:myStruct和value,其他參數是可選的。我如何傳遞參數的數字變量C

這是我的函數的樣本:

int find(struct myStruct *, void * value, ...); 

這是可能的所有參數:

struct myStruct *, void * value, int (*comparable) (void *, void *), int flag 

我相信我將不得不使用va_list的,但我不希望通空如何最後的參數。這個有可能?

+0

如果您未通過NULL終止符,它將如何知道何時停止? – cnicutar 2013-03-19 13:12:04

+0

我知道參數的最大數量,我可以用它來知道我什麼時候停止? – 2013-03-19 13:16:37

+0

這可能會幫助你:http://stackoverflow.com/questions/2124339/c-preprocessor-va-args-number-of-arguments/2124433#2124433 – qrdl 2013-03-19 13:26:15

回答

0

與你有變量參數至少以下選項:

  • 最後一個參數是NULL(或不同的東西,其被識別爲終止)
  • 「第一」參數是參數的數量,其該功能必須識別。
  • 第一個參數(一個或多個)spezify,什麼必須遵循(如格式化字符串)

但要記住:你(程序員)必須保證,您提供的參數正確的號碼。所以如果你想爲你的函數創建一個界面(對於其他程序員),請確保它是儘可能自然的。如果是,f.e.一個多創建GUI函數,一個gui元素的NULL終止列表。

+1

這些不是唯一的選擇。考慮到目前爲止所看到的參數,任何可以確定是否存在另一個參數的函數就足夠了。也就是說,鑑於迄今爲止所看到的參數,您必須通過某種方式確定是否至少有一個參數。 – 2013-03-19 13:22:43

+0

不可能我使用三分之一的選項:如何設置va_list默認輸入我的查找功能或第四個選項如何使用sinal來解決這個問題? signal.h – 2013-03-19 13:31:56

+0

要在va_list中獲得可比較的結果嗎? va_arg(ap,int(* comparable)(void *,void *)) – 2013-03-19 13:56:56

相關問題