C program without main function!!!


This post is for all those who are having even a little bit knowledge of C language. Have you ever heard about a C program without main function ? Here is an example of such program. Check it out whether it works or not.

The code:

#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 “); }


It works perfectly. But how? Let's check it out.

Actually indirectly this program is calling main().

Here we are using preprocessor directive #define with arguments to give an impression that the program runs without main.

The ‘##‘ operator is called the token pasting or token merging operator. That is we can merge two or more characters with it.

Look at the 2nd line of program :-

#define decode(s,t,u,m,p,e,d) m##s##u##t

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’.(Bingo!!)

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…

You may also like

Popular Posts