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.
As the calls proceed and the static variable is updated, you can see the procedure for live.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…"; }


LinkBack URL
About LinkBacks




Reply With Quote








Bookmarks
Algorithms and Data Structures
Java tutorials
Algorithms Forum