printf("Circumference of Circle is %f\n", (2 * PI * r) );
}
#include<stdio.h>
#define PI 3.14159265358979323846
#define AREA
void area_circle(float r);
void circumference_circle(float r);
int main()
{
float r;
printf("Enter radius of Circle\n");
scanf("%f", &r);
#if defined(AREA)
area_circle(r);
#elif defined(CIRCUM)
circumference_circle(r);
#else
printf("Code To Be Implemented\n");
#endif // defined
return 0;
}
void area_circle(float r)
{
printf("Area of Circle is %f\n", (PI * r * r) );
}
void circumference_circle(float r)
{
printf("Circumference of Circle is %f\n", (2 * PI * r) );
}
Output: Enter radius of Circle 5 Area of Circle is 78.539816
In above source code AREA macro template or macro name is defined. So defined(AREA) returns true in #if condition. Hence the code inside #if block gets compiled and executed.
printf("Circumference of Circle is %f\n", (2 * PI * r) );
}
#include<stdio.h>
#define PI 3.14159265358979323846
#define CIRCUM
void area_circle(float r);
void circumference_circle(float r);
int main()
{
float r;
printf("Enter radius of Circle\n");
scanf("%f", &r);
#if defined(AREA)
area_circle(r);
#elif defined(CIRCUM)
circumference_circle(r);
#else
printf("Code To Be Implemented\n");
#endif // defined
return 0;
}
void area_circle(float r)
{
printf("Area of Circle is %f\n", (PI * r * r) );
}
void circumference_circle(float r)
{
printf("Circumference of Circle is %f\n", (2 * PI * r) );
}
Output: Enter radius of Circle 5 Circumference of Circle is 31.415927
Here macro name AREA is not defined, hence code inside #if gets skipped. Whereas macro CIRCUM is defined, so the code inside #elif gets compiled and executed.
If neither AREA and nor CIRCUM is defined, then code inside #else block gets compiled and executed.
In this video tutorial lets learn about preprocessor command or directives like #if, #elif, #else and #endif. These directives are used in conditional compilation.
The block of code inside #if block works only if the condition or the expression in resolved to non-zero number. If the expression is resolved to zero, then the code inside #if is skipped from compilation.
Same is true for #elif: If the condition or the expression is resolved to 0 then the code inside #elif block is skipped from compilation. If it’s resolved to non-zero number then the block of code inside #elif gets compiled and executed.
#else is optional and when used, it should be present only once between #if and #endif, and it should be present at the end(just before the #endif directive). If none of the conditions in #if and #elif match, then the code inside #else directive block gets executed.
#elif is also optional. But it can be used any number of times inside #if and #endif. But it should always be written after #if and not before it. It should be present before #else and not after #else directive.
Note: We can have nested #if #elif #else #endif inside #if and/or #elif and/or #else block. Nesting can go any number or depth. But remember to have #endif for every #if.
Video Tutorial: Conditional Compilation In C: #if #elif #else #endif
1. When you want certain code to be skipped: #if or #elif or #else part of the code is compiled and executed only when the conditions are met.
2. To write portable code: Again, like that of in #ifdef and #else, we could write portable code. That is, we can write code for specific devices in #if, #elif and #else part and the compiler compiles the code specific to that device. All other code will be treated as comments.
3. Saving memory and file size: We could use it in big projects. We could include device specific files inside #if, #elif and #else blocks depending upon the condition. This way we could avoid including or importing all the files into our source code.
#include<stdio.h>
#define MARKS 50
int main()
{
#if(MARKS <= 100 && MARKS >= 80)
printf("GRADE A\n");
#endif // MARKS
printf("Your Result\n");
return 0;
}
Output: GRADE A Your Result
Check the condition for #if. We can use logical operator and/or arithmetic operators and/or relational operators and/or Conditional Operators in the condition.
#include<stdio.h>
#define MARKS 50
int main()
{
#if(MARKS <= 100 && MARKS >= 80)
printf("GRADE A\n");
#elif(MARKS <= 79 && MARKS >= 60)
printf("GRADE B\n");
#elif(MARKS <= 59 && MARKS >= 40)
printf("GRADE C\n");
#elif(MARKS <= 39 && MARKS >= 30)
printf("GRADE D\n");
#else
printf("Please retake the test!\n");
#endif // MARKS
printf("Your Result\n");
return 0;
}
Output: GRADE C Your Result
Only 1 block of code is compiled and executed here, even if multiple conditions are satisfying. Whichever condition returns non-zero number first, the code inside its block gets executed. All other code will be skipped.