#pragma Miscellaneous Directives in C
It is a compiler-dependent pre-processor i.e. all the compilers don’t support this pre-processor. A processor directive that is not specified by ISO standard. Pragmas offer control actions of the compiler and linker. #pragma is a miscellaneous directive that is used to turn on or off certain features. It varies from compiler to compiler if the compiler is not recognized then it ignores it. #pragma start-up and #pragma exit are used to specify which function should be called upon start-up (before main()) or program exit (just before the program terminates). Startup and exit functions should not receive or return any values. #pragma wanr used to suppress (ignore) specific warning messages from the compiler.
- #pragma warn –rrl: Return value warnings
- #pragna warn –par: Parameter not used warnings
- #pragma warn –rch: Unreachable code warnings
Program to understand #pragma Miscellaneous Directives in C:
#include<stdio.h>
#pragma warn -rrl
#pragma warn -par
#pragma warn -rch
int abc (int a)
{
print ("Hello abc");
}
void main ()
{
abc (10);
return;
getch ();
}
When this code is passed for compilation, then we are not getting any return value, parameters never used, and unreachable code warning messages.

Program:
#include<stdio.h>
void abc ();
void xyz ();
#pragma startup abc
#pragma exit xyz
void func1 ()
{
printf ("Hello abc");
}
void func2 ()
{
printf ("Hello xyz");
}
int main ()
{
printf ("Hello main()");
return 0;
}
The above code will produce the output as given below when running on GCC compilers:
Hello main()
This happens because GCC does not support the #pragma startup or exit. However, you can use the below code for a similar output on GCC compilers.
Program to understand Miscellaneous Directives in C Language:
#include<stdio.h>
void abc ();
void xyz ();
void __attribute__ ((constructor)) abc ();
void __attribute__ ((destructor)) xyz ();
void abc()
{
printf ("Hello abc \n");
}
void xyz()
{
printf("Hello xyz\n");
}
int main()
{
printf ("Hello main()\n");
return 0;
}
Output:

- In the previous program, the “abc” function is loaded first before loading the main function and the “xyz” function is loaded after loading the main function.
- Between startup and exit automatically the main function is executed.
- In implementation when we are having more than 1 startup and exit function then according to the priority, we can execute those functions.
- In #pragma startup, the function which is having the highest priority, will be executed first and which is having the least priority, will be executed last before the main().
- In #pragma startup, when equal priority occurred then the last specified function will be executed first.
- In #pragma exit, the function which is having the highest priority will be executed in end and which is having the least priority will be executed first after main() only.
- In #pragma exit, when equal priority occurred, then the last specified function will be executed first.
Program:
#include<stdio.h>
void abc()
{
printf ("From abc \n");
}
void xyz()
{
printf("From xyz \n");
}
void close()
{
printf("From close \n");
}
void end()
{
printf("From end \n");
}
#pragma startup abc 2
#pragma startup xyz 1
#pragma exit close 1
#pragma exit end 2
void main()
{
printf("From main() \n");
}
Output:

#error Miscellaneous Directives in C
By using this preprocessor, we can create user-defined error messages at the time of compilation.
Program to understand #error Miscellaneous Directives in C:
#include<stdio.h>
#define NIT
void main ()
{
#ifndef NIT
#error NIT MACRO NEEd TO BE DEFINE
#endif
#ifdef NIT
printf ("Welcome\t");
printf ("NIT");
#endif
}
Output: Welcome NIT
In the previous program, ifNIT MACRO is not defined, it gives the error at the time of compiling.
#line Miscellaneous Directives in C
By using this preprocessor, we can create user-defined line sequences in an intermediate file. It is used to reset the line number in the code.
Program to understand #line Miscellaneous Directives in C:
#include<stdio.h>
void main ()
{
printf ("A\n");
#if 5>2!=1
printf ("NIT");
printf ("B");
#endif
#line 4
printf ("Welcome\t");
printf ("C");
}
Output:

When the previous code is pre-processing, the line sequence is reset to 4.
