我想在C中编写一个函数,它接受任何类型的数据类型,如int,char,float或任何其他数据类型,并对它们执行一些操作。因为在C ++中这是可能的,在C?
中是否可行答案 0 :(得分:9)
它不会很漂亮。看一下this page的例子。很多宏用法。
答案 1 :(得分:1)
关于你在C中唯一能做的就是宏,模板的表兄弟。例如:
#define max(a, b) ((a) < (b) ? (b) : (a))
请注意,这有一个很大的问题......宏参数被多次评估。例如:
max(i+=1, i);
扩展为:
((i+=1) < (i) ? (i+=1) : (i));
表达式的结果可能是各种编译器上的各种有趣的东西。
因此,宏实际上是模板的不良替代品。您可以使用与它们类型无关的“功能”。但它们带来了许多障碍和陷阱,这使得它们对于任何非常重要的东西几乎毫无用处。它们也相当“毛茸茸”,使你的代码比模板更难理解。
我刚给出的max
示例可能看起来不那么毛茸茸(虽然对参数的双重评估肯定是令人惊讶且难以处理的事情),但是here is an example of declaring something like a templated vector type with macros, and it is obviously hairy。
答案 2 :(得分:0)
您可以创建并接受union
,也可以使用通用void*
获取指向数据的指针。但是,C不像C ++那样支持模板化。
答案 3 :(得分:0)
是的,可以通过使用宏来实现。看到 http://www.flipcode.com/archives/Faking_Templates_In_C.shtml
答案 4 :(得分:0)
您可以使用...
安排作弊,例如:使用varargs
函数
答案 5 :(得分:0)
我猜它一定是一个无效指针
void *p;
只是进行类型转换并使用它。你问的是c的限制,这就是它在c ++中引入的原因
在阅读你的评论后,我猜你需要一个参数来发送变量的数据类型
func( void *p, int ) \\ second argument must be a datatype use sizeof to find the datatype