>Why don't you show me some C code in which you overload a function?
One way is to use function pointers:
Code:
#include <stdio.h>

void f1(int x) { printf("f1: %d\n", x); }
void f2(char *s) { printf("f2: %s\n", s); }

int
main(void)
{
  void (*f)();

  f = f1;
  f(12345);
  f = f2;
  f("Not what you were expecting?");

  return 0;
}
Alternatively, you could fiddle with macros as well:
Code:
#include <stdio.h>

#define f(overload) (*pf[overload])

void f1(int x) { printf("f1: %d\n", x); }
void f2(char *s) { printf("f2: %s\n", s); }

static void (*pf[])() = {
  f1, f2
};

int
main(void)
{
  f(0)(12345);
  f(1)("Really ugly, no?");

  return 0;
}
Or you could play any number of games. But in the end, none of them are safe, and they're all pretty ugly for this purpose. And before you say that it isn't C++ style overloading, I know. The C language doesn't support that kind of feature, so you have to fake it. But that doesn't mean it isn't possible in some fashion or another.