我正在C中實現簡單的庫列表,並且我在編寫find
函數時遇到了問題。如何寫任何類型的接受(一個)參數的C函數
我想我的函數接受任何類型的參數來尋找,既: find(my_list, 3)
和find(my_list, my_int_var_to_find)
。 我已經有信息什麼是列表的元素類型。
現在我已經找到了幾個處理這個方式:
不同的功能,後綴爲不同的類型:
int findi(void* list, int i)
,int findd(void* list, double d)
- 但我不喜歡這種方法,它看起來像冗餘我和一個API很混亂。使用UNION:
typedef union { int i; double d; char c; ... } any_type;
但這種方式我強迫用戶都知道
any_type
工會,以及find
調用之前創建它。我想避免這種情況。使用可變參數函數:
int find(void* list, ...)
。我喜歡這種方法。不過,我擔心的是參數數量沒有限制。用戶可以自由寫int x = find(list, 1, 2.0, 'c')
,但我不知道它應該是什麼意思。
我所看到的也回答了這個問題:C : send different structures for one function argument但它是無關緊要的,因爲我想接受非指針參數。
處理此功能的正確方法是什麼?
沒有一個。 – Mehrdad
我會做的方法#1和利用新的C11'_Generic'的宏來區分類型。 – oldrinb