In today’s video tutorial lets see how to use #undef preprocessor directive.
Related Read:
C Program To Find Area of Circle Using Macro Expansion
Conditional Compilation In C: #if #elif #else #endif
Page Contents
#undef removes or undefines a macro name which is previously created or defined using #define directive.
#undef MACRO_NAME
Note: If a Macro template is associated with a Macro expansion, you need not mention the macro expansion to undefine the macro. You simple undefine using this syntax: #undef MACRO_NAME
#include<stdio.h>
#define iOS
#undef iOS
int main()
{
#if defined(iOS)
printf("I Love Apple Devices\n");
#else
printf("Macro iOS has been undefined\n");
#endif // defined
return 0;
}
Output:
Macro iOS has been undefined
In above source code we’re undefining the Macro iOS immediately after defining it. So defined(iOS) returns false or 0. So code inside #else block gets compiled and executed.
#include<stdio.h>
#define iOS
int main()
{
#if defined(iOS)
printf("I Love Apple Devices\n");
printf("Gift me a latest iPhone!\n");
#else
printf("Macro iOS has been undefined\n");
#endif // defined
return 0;
}
Output:
I Love Apple Devices
Gift me a latest iPhone!
Here Macro iOS is defined, so defined(iOS) returns true. That’s why block of code inside #if directive gets compiled and executed.
#include<stdio.h>
#define iOS
int main()
{
#undef iOS
#if defined(iOS)
printf("I Love Apple Devices\n");
#else
printf("Macro iOS has been undefined\n");
#endif // defined
return 0;
}
Output:
Macro iOS has been undefined
Even though #define iOS is defined at global level you can undefine it inside main() method.
Note: defined() is a preprocessor operator which returns true if the passed macro name is defined orelse returns false or zero if its not defined.
Instead of defined() preprocessor operator you could even use #ifdef or #ifndef to check if the Macro template or Macro name is defined or not defined.
#include<stdio.h>
#define iOS
int main()
{
int flag = 1;
do
{
#if defined(iOS)
printf("I Love Apple Devices\n");
printf("This displays all your iPhone Device Details\n");
#else
printf("I'm inside do while block.\n");
#endif // defined
printf("Enter your choice? (0/1)\n");
scanf("%d", &flag);
}while(flag);
#undef iOS
#if defined(iOS)
printf("I Love Apple Devices\n");
printf("This displays all your iPhone Device Details\n");
#else
printf("Macro iOS has been undefined\n");
#endif // defined
return 0;
}
Output:
I Love Apple Devices
This displays all your iPhone Device Details
Enter your choice? (0/1)
1
I Love Apple Devices
This displays all your iPhone Device Details
Enter your choice? (0/1)
1
I Love Apple Devices
This displays all your iPhone Device Details
Enter your choice? (0/1)
0
Macro iOS has been undefined
In above program we are defining iOS macro globally. Inside main method we use do while loop and keep executing #if #else #endif directives. Since iOS is defined, the block of code inside #if gets executed each time. Once user enters 0 as input, the control exits do while loop execution. Next it encounters #undef iOS, so defined(iOS) now returns false or 0, hence code inside #else directive gets executed.
For list of all c programming interviews / viva question and answers visit: C Programming Interview / Viva Q&A List
For full C programming language free video tutorial list visit:C Programming: Beginner To Advance To Expert