Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does C support overloading?

Tags:

c

I just want to know if C supports over loading? As we use system functions like printf with different no of arguments. Help me out

like image 253
J.K.Aery Avatar asked Feb 28 '10 17:02

J.K.Aery


People also ask

Does C allow overloaded functions?

And C doesn't support Function Overloading.

Which language has function overloading not possible?

In which of the following languages is function overloading not possible? Explanation: Function Overloading is not possible in C as it is not an Object-Oriented Language.

Is printf overloaded?

printf() in C is a variadic function which can be thought of as a form of overloading. Unlike overloaded functions in languages like C++, Java, C# etc., a variadic function is not type-safe which is why they are somewhat frowned upon.


1 Answers

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.

like image 170
Steve Jessop Avatar answered Oct 22 '22 00:10

Steve Jessop