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
No, C does not support overloading, but it does support Variadic functions. printf is an example of Variadic functions.
C Does not support overloading. But we can implement that functionality by programming our own library that in turn could provide overloading support.
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.
No, C doesn't support overloading. If you want to implement overloading similar to C++, you will have to mangle your function names manually, using some sort of consistent convention. For example:
int myModule_myFunction_add();
int myModule_myFunction_add_int(int);
int myModule_myFunction_add_char_int(char, int);
int myModule_myFunction_add_pMyStruct_int(MyStruct*, int);
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.
No c does not support function overloading. But you can get it to compile/work if you are using g++ (a c++ compiler).
Not directly, and this is not how printf
works, but it is possible to create the equivalent of overloaded functions using macros if the types are of different sizes. The type-generic math functions in tgmath.h of the C99 standard may be implemented in that manner.