C Program Without a Main Function
How to write a C program without a main function?. Is it possible to do
that. Yes there can be a C program without a main function. Here’s the
code of the program without a main function…
#include<stdio.h>
#define decode(s,t,u,m,p,e,d) m##s##u##t
#define begin decode(a,n,i,m,a,t,e)int begin()
{
printf(” hello “);
}
#define decode(s,t,u,m,p,e,d) m##s##u##t
#define begin decode(a,n,i,m,a,t,e)int begin()
{
printf(” hello “);
}
Does
the above program run without the main function? Yes, the above program
runs perfectly fine even without a main function. But how, whats the
logic behind it? How can we have a C program working without main?
Here
we are using preprocessor directive #define with arguments to give an
impression that the program runs without main. But in reality it runs
with a hidden main function.
The ‘##‘ operator is called the token pasting or token merging operator. That is we can merge two or more characters with it.
NOTE: A Preprocessor is program which processess the source code before compilation.
Look at the 2nd line of program -
#define decode(s,t,u,m,p,e,d) m##s##u##t
What
is the preprocessor doing here. The macro decode(s,t,u,m,p,e,d) is
being expanded as “msut” (The ## operator merges m,s,u & t into
msut). The logic is when you pass (s,t,u,m,p,e,d) as argument it merges
the 4th,1st,3rd & the 2nd characters(tokens).
Now look at the third line of the program -
#define begin decode(a,n,i,m,a,t,e)
Here
the preprocessor replaces the macro “begin” with the expansion
decode(a,n,i,m,a,t,e). According to the macro definition in the previous
line the argument must be expanded so that the 4th,1st,3rd & the
2nd characters must be merged. In the argument (a,n,i,m,a,t,e)
4th,1st,3rd & the 2nd characters are ‘m’,'a’,'i’ & ‘n’.
So
the third line “int begin” is replaced by “int main” by the
preprocessor before the program is passed on for the compiler. That’s
it…
The bottom line is there can
never exist a C program without a main function. Here we are just
playing a gimmick that makes us beleive the program runs without main
function, but actually there exists a hidden main function in the
program. Here we are using the proprocessor directive to intelligently
replace the word begin” by “main”. In simple words int begin=int main.
No comments:
Post a Comment