You are here: Home &rarr Uncategorized &rarr Program without main()

Program without main()

Often in classrooms we are taught that the main function is the ‘main’ function in a program! But it actually is not so. That is actually the default behavior of the compiler. The compiler has a predefined set of rules according to which ::

1. The main() function has a default priority of 0, which is the highest.
2. Priorities from 0 to 63 are reserved for use by C libraries.
3. Priorities from 64 o 99 are kept as a second reserve if the number of library function in a code exceeds 63.
4. Any user defined function starts with a priority of 100.
5. The maximum explicitly defined priority can be 254.

Thus it is obvious that the main() works with the highest priority at a program startup.
But the c language provides for a scope of changing the priority such that main() has a priority shift from startup to exit, i.e.; it has a higher priority on exit than on startup. This can exactly be done with the #pragma directive. The #pragma can help us to set priorities of out user defined functions, at startup as well at exit.

In this code I have implemented the #pragma directive to create a function ‘disp_start()’ which has a higher priority of 60 than main(), whose priority has been lowered from 0 to 70.

#include 
void disp_start();
void main();
void disp_end();
#pragma startup main 70
#pragma startup disp_start 60
#pragma exit disp_end
static int a=1;
void disp_start()
{
FILE *fp=fopen("nomain.cpp","r");
char c='a';
while(c!=EOF)
{
putch(c=fgetc(fp));
}
fclose(fp);
cout<<"nnStarting first priority functionn";
cout<<"Value of X is initially"<

To keep in mind ::
1.The #pragma wont’ always change priorities to anything specified. Most of the time it is on availability.
2.The highest priorities of 0, 1 and 2 cannot always be assigned to all functions, and are machine dependent. An attempt to assign these priorities may result in a processor fault in some machines on runtime.
3. Any call to a library function, whose priority runs into the explicitly defined area, will overwrite the explicit priority definition and make space for itself.


About Chinmoy


Chinmoy Kanjilal is the admin of this blog is a programmer and a technology, Linux and web2.0 enthusiast and evangelist from India with an eye for detail. He has a fondness for intriguing software products and hardware hacks.

  • #pragma is not compiler specific, though this code needs some modification for gcc compatibility. Change return of main and use new style headers with namespaces.
  • binod mainali
    the code written over here is giving three errors when i tested it in the bloodshed Dev Cpp that multiple declaration of void main() is it compiler specific one should keep in mind while using #pragma pre processor directive
blog comments powered by Disqus
Content on this Blog is Copyright © 2010 Techarraz. Some rights reserved.
Designed by Theme Junkie. Powered by WordPress.