我使用C99编写代码,并通过GCC进行编译。出于样式原因,我想使用函数重载(否则我必须自己进行名称混淆)。
我已阅读 C99不支持函数重载的原因是什么? 然而,我仍然想知道是否可以在GCC中启用它。
你能帮我吗?
我已阅读 C99不支持函数重载的原因是什么? 然而,我仍然想知道是否可以在GCC中启用它。
你能帮我吗?
void foo_int(int x);
void foo_double(double x);
#define foo(arg) _Generic((arg), int: foo_int, double: foo_double)(arg)
这是好事还是坏事呢?嗯,这就是 C 语言。
_Generic
来编写类型通用宏。A
调用哪个函数,则可以使用类似于(sizeof(A) == sizeof(float) ? sqrtf(A) : sqrt(A))
的语句。({ any code here })
的块表达式以及typeof
来声明与宏参数相同类型的辅助变量。static void __attribute__((overloadable)) MyFunc(float x)
{
puts("This is a float function");
}
static int __attribute__((overloadable)) MyFunc(int x)
{
puts("This is an integer function");
return x;
}
struct core * __must_check getAnyCore(unsigned long v,...) {
va_list ap;
struct core *c = NULL;
va_start(ap, v);
switch (v) {
case sizeof(struct device):
c = (va_arg(ap, struct device *))->c;
break;
case sizeof(struct driver):
c = (va_arg(ap, struct driver *))->c;
break;
default:
c = NULL;
break;
}
va_end(ap);
return c;
}
#define getCore(obj) getAnyCore(sizeof(*obj),obj)
CGG
?如果您想要高级语言特性,例如函数重载,那么您应该考虑更适合的语言,比如C++。 - Paul RCGG
是对GCC
的拼写错误? - Kyle