How to print “GeeksforGeeks” with empty main() in C, C++ and Java?

Write a program that prints “GeeksforGeeks” with empty main() function. You are not allowed to write anything in main().

C language

  1. One way of doing this is to apply GCC constructor attribute to a function so that it executes before main() (See this for details).
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    #include <stdio.h>
      
    /* Apply the constructor attribute to myStartupFun() 
       so that it is executed before main() */
    void myStartupFun(void) __attribute__((constructor));
      
    /* implementation of myStartupFun */
    void myStartupFun(void)
    {
        printf("GeeksforGeeks");
    }
      
    int main()
    {
    }

    chevron_right

    
    

    Output:



    GeeksforGeeks
  2. In linux, just override the default definition of _start() function so that it would work as a custom startup code. See this article to understand more.
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    #include <stdio.h>
    #include <stdlib.h>
      
    int main(void)
    {
    }
      
    // _start() function
    void _start(void)
    {
        printf("GeeeksforGeeks");
      
        // Call main() function
        int var = main();
        exit(var);
    }

    chevron_right

    
    

    Now compile this by following command

    gcc -nostartfiles -o file file.c

    Output:

    GeeksforGeeks

C++ language

  1. The idea is to create a class, have a cout statement in constructor and create a global object of the class. When the object is created, constructor is called and “GeeksforGeeks” is printed.
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    #include <iostream>
      
    class MyClass {
    public:
        MyClass()
        {
            std::cout << "GeeksforGeeks";
        }
    } m;
      
    int main()
    {
    }

    chevron_right

    
    

    Output:

    GeeksforGeeks
  2. The idea is to create struct and use the same logic which is discussed in above. The reason is that struct and class in C++ are exactly the same data structure except struct default to public visibility while class defaults to private visibility
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    #include <iostream>
      
    struct Mystruct {
      
        Mystruct()
        {
            std::cout << "GeeksforGeeks";
        }
    } obj;
      
    int main() {}

    chevron_right

    
    

    Output:

    GeeksforGeeks
  3. By using global variable, idea is to initialise printf() function to global variable, but it will work only in C++ language as in C language we can’t initialise variable or expression like this to global variable.
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    #include <cstdio>
      
    int var = printf("GeeksforGeeks");
      
    int main()
    {
    }

    chevron_right

    
    

    Output:

    GeeksforGeeks

Java language

The idea is to use static block for printing, actually any static blocks declared outside the main() method in java is executed before the main method.

filter_none

edit
close

play_arrow

link
brightness_4
code

class Myjava {
    static
    {
        System.out.println("GeeksforGeeks");
    }
    public static void main(String args[])
    {
    }
}

chevron_right


Output:

GeeksforGeeks

This article is contributed by Viki and improved by Shubham Bansal. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.



My Personal Notes arrow_drop_up


Article Tags :
Practice Tags :


2


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.