Tag: variadic

如何编写C函数接受任何类型的(一个)参数

我正在为C中的列表实现简单的库,我在编写find函数时遇到了问题。 我希望我的函数接受任何类型的参数来查找, find(my_list, 3) :my 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令人困惑。 使用联盟: typedef union { int i; double d; char c; … } any_type; 但是这样我强制用户既知道any_type联合,又在调用find之前创建它。 我想避免这种情况。 使用variadic函数: int find(void* list, …) 。 我喜欢这种方法。 但是,我担心没有对参数数量的限制。 用户可以自由编写int x = find(list, 1, 2.0, […]

从C ++宏创建字符串列表和枚举列表

为了使我的代码更短更容易更改,我想替换类似的东西 enum{ E_AAA, E_BBB, E_CCC }; static const char *strings{“AAA”, “BBB”, “CCC” }; 使用宏,如INIT(AAA,BBB,CCC); 但是当我尝试使用变量参数和字符串化做一个宏时,我得到一个错误,因为没有声明参数。 有关如何做到这一点的任何想法?