Write a C language code that prints GeeksforGeeks without any main function.
Logically it’s seems impossible to write a C program without using a main() function. Since every program must have a main() function because:-
- It’s an entry point of every C/C++ program.
- All Predefined and User-defined Functions are called directly or indirectly through the main.
Therefore we will use preprocessor(a program which processes the source code before compilation) directive #define with arguments to give an impression that the program runs without main. But in reality it runs with a hidden main function. Let’s see how the preprocessor doing their job:-
Hence it can be solved in following ways:-
- Using a macro that defines main
#include<stdio.h>#define fun mainintfun(void){printf("Geeksforgeeks");return0;}Output: Geeksforgeeks
- Using Token-Pasting Operator
The above solution has word ‘main’ in it. If we are not allowed to even write main, we can use token-pasting operator (see this for details)#include<stdio.h>#define fun m##a##i##nintfun(){printf("Geeksforgeeks");return0;}Output: Geeksforgeeks
- Using Argumented Macro
#include<stdio.h>#define begin(m,a,i,n) m##a##i##n#define start begin(m,a,i,n)voidstart() {printf("Geeksforgeeks");}Output: Geeksforgeeks
- Modify the entry point during compilation
#include<stdio.h>#include<stdlib.h>// entry point functionintnomain();void_start(){// calling entry pointnomain();exit(0);}intnomain(){puts("Geeksforgeeks");return0;}Output: Geeksforgeeks
Compilation using command :
gcc filename.c -nostartfiles
(nostartfiles option tells the compiler to avoid standard linking)Explanation:
Under normal compilation the body of _start() will contain a function call to main() [ this _start() will be appended to every code during normal compilation], so if that main() defination is not present it will result in error like “In function `_start’:
(.text+0x20): undefined reference to `main’.
In the above code what we have done is that we have defined our own _start() and defined our own entry point i.e nomain()

Post a Comment