或者一个更高级的写法:
voidgcc_type_overload_aux(inttypeval, ...)
{
switch(typeval)
{
case1:
{
va_list v;
va_start(v, typeval);
structs1 s = va_arg(v,structs1);
va_end(v);
gcc_overload_s1(s);
break;
}
case2:
{
va_list v;
va_start(v, typeval);
structs2 s = va_arg(v,structs2);
va_end(v);
gcc_overload_s2(s);
break;
}
default:
{
printf("Invalid type to 'gcc_type_overload()'\n");
exit(1);
}
}
}
#definegcc_type_overload(A)\
gcc_type_overload_aux(\
__builtin_types_compatible_p(typeof(A),structs1) *1\
+ __builtin_types_compatible_p(typeof(A),structs2) *2\
, A)
另外两种用 C 实现函数重载的方法可以是利用宏和预处理,以及函数指针,只不过具体的重载方式也要根据特定的应用场景来决定。
不过,C 实现函数重载需要开发人员自己编写很多额外的代码,门槛稍微高了,这也使得 C 语言不太适合用函数重载方式来编写规范的应用程序接口。
所以,以后别人如果问你,C 可不可以实现函数重载,你就不能说“C 是不支持函数重载的”,而应该回答:“看情况看心情看应用场景咯 :-)“。