Alex Rivera | Logout

Does C support function overloading?

Asked 2010-02-28T17:07:36.377
66

I just want to know if C supports function overloading? As we use system functions like printf() with different number of arguments.

Help me out.

Edit
Report

2 Answers

55

No, C doesn't support any form of overloading (unless you count the fact that the built-in operators are overloaded already, to be a form of overloading).

printf works using a feature called varargs. You make a call that looks like it might be overloaded:

printf("%d", 12); // int overload?
printf("%s", "hi"); // char* overload?

Actually it isn't. There is only one printf function, but the compiler uses a special calling convention to call it, where whatever arguments you provide are put in sequence on the stack[*]. printf (or vprintf) examines the format string and uses that to work out how to read those arguments back. This is why printf isn't type-safe:

char *format = "%d";
printf(format, "hi"); // undefined behaviour, no diagnostic required.

[*] the standard doesn't actually say they're passed on the stack, or mention a stack at all, but that's the natural implementation.

answered 2010-02-28T17:14:00.907
10

It all depends on how you define "support".

Obviously, C language provides overloaded operators within the core language, since most operators in C have overloaded functionality: you can use binary + with int, long and with pointer types.

Yet at the same time C does not allow you to create your own overloaded functions, and C standard library also has to resort to differently-named functions to be used with different types (like abs, fabs, labs and so on).

In other words, C has some degree of overloading hardcoded into the core language, but neither the standard library nor the users are allowed to do their own overloading.

answered 2010-02-28T17:30:10.367

Your Answer