View Single Post
  #1 (permalink)  
Old 06-16-2008, 03:26 AM
Chinmoy's Avatar   
Chinmoy Chinmoy is offline
Programming Professional
 
Join Date: Feb 2008
Location: where heaven meets earth
Posts: 339
Credits: 0
Rep Power: 7
Chinmoy has a spectacular aura aboutChinmoy has a spectacular aura about
Default 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.

Code:
#include<iostream .h>
# include <stdio .h>
#include<conio .h>
 
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< <"\n\nStarting first priority function\n";
        cout<<"Value of X is initially "<<a;    a++;
        cout<<"\nEnd of start()….\n";
        cout<<"Value of X now is "<<a;
}
void main()
{
        cout<<"\n\nEntering main()\n";
        cout<<"Value of X is initially "<<a;    a++;
        cout<<"\nEnd of main()….\n";
        cout<<"Value of X now is "<<a;
}
void disp_end()
{
        cout<<"\n\nEntering exit priority function\n";
        cout<<"Value of X is initially "<<a;    a++;
        cout<<"\nEnd of exit()….";
        cout<<"\nValue of X now is "<<a;
   cout<<"\n\n\t\tALL CALLS TRACED…";
}
As the calls proceed and the static variable is updated, you can see the procedure for live.

__________________
God is real... unless declared an integer

Last edited by Jordan; 06-16-2008 at 07:49 AM.
Reply With Quote

Sponsored Links