Sometimes C looks like to follow object oriented paradigm.
Don’t get carried away withis idea. Current post focuses on this.
Star (*) Operator
in C language acts both as pointer and multiplication. Then could we say that C
supports Operator Overloading?
C language certainly does not obey operator overloading. In
operator overloading, the function of the operator becomes different, but the
arity of the operator never changes.
Here when * acts as a multiplier it is binary in nature, but when it acts as a
pointer, it acts as a unary operator. Hence this example never follows the
condition of operator overloading regarding the arity of the operator and so by
citing this example, we cannot say that C supports operator overloading.
In C language,
printf function takes different number and different nature of arguments in
every time. Is it the example of Function Overloading?
No way! C does not support function overloading at all. The
functions print() is capable of accepting different numbers of arguments due to
an operator ellipsis which is
represented as … (just three dots, nothing else!)
If we look at the prototype of printf, it would say
something like
int printf(const char*,
…);
The second parameter is the ellipsis and it uses four
different predefined macros va_list, va_start, va_arg and va_end. Ellipsis essentially says that there could be
any number of arguments. This what printf() is backed with, certainly this is not
a valid example of function overloading. Because in function overloading the
numbers of arguments are specific, for example a function accepting two
parameters can be made to accept three parameters (or so), but the instances,
two or three are specific. Again in function overloading, the type of parameters
can be changed, but once again the set is fixed like a function can act to
accept a float and an int, but any data type with function overloading? Just forget
it out.
So we are left with to demystify how printf() can accept any
data type! This is done by parsing the first parameter of the printf that is const
char* which is a string essentially. As we all know, this string contains
different format specifiers like %d, %f etc, these specifiers peels out the
knowledge that what is type of corresponding argument.
For example if we use
printf(“The results
are = %d %f”, i_val, f_val);
Then in the va_list macro, that is in the list of (v)ariable
(a)rgument, there will be two arguments. By parsing the mandatory format string,
the type of the first argument is computed as int and the second argument is
fixed as float.
Now the question is where is this parsing algorithm present?
This algorithm has been implanted within the definition of printf().
In
the following post I will show how to use ellipsis operator with code examples.
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.