C 中是否存在某种形式的函数重载?

Does some form of function overloading exist in C?

假设我想创建一个函数 first,它是 C 中数组的第一个元素 returns。显然我想创建一个可以解释所有类型的函数。

我会从这个开始:

int first(int list[]) {
   return list[0];
}

哪个有效。显然...

我现在想为 char

做同样的事情
char first(char list[]) {
   return list[0];
}

无法编译,因为程序中已经有一个 first 函数。

你们C哥是怎么处理这种情况的?

是否被迫使用不同的名称?

int first_int(int list[]) {
   return list[0];
}

char first_char(char list[]) {
   return list[0];
}

C11 引入了 generic selections 来模拟重载:

#define first(X)          \
    _Generic((X),         \
        int* : first_int, \
        char*: first_char \
    )(X)

See it live on Coliru