我正在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