Booleans in C
Unlike the int, char or float types, the ANSI C standard doesn’t have a built-in or primary Boolean type. A Boolean or bool data generally refers to the one that can hold one of the two binary values: true or false (or yes/no, on/off, etc.). Even if the bool type is not available in C, you can implement the behaviour of Booleans with the help of an enum type.
The new versions of C compilers, complying with the C99 standard or later, support the bool type, which has been defined in the header file stdbool.h.
Using enum to Implement Boolean Type in C
The enum type assigns user-defined identifiers to integral constants. We can define an enumerated type with true and false as the identifiers with the values 1 and 0.
Example
1 or any other number that is not 0 represents true, whereas 0 represents false.
#include <stdio.h>
int main (){
   enum bool {false, true};
   enum bool x = true;
   enum bool y = false;
   printf ("%d\n", x);
   printf ("%d\n", y);
}
Output
Run the code and check its output −
1
0
typedef enum as BOOL
To make it more concise, we can use the typedef keyword to call enum bool by the name BOOL.
Example 1
Take a look at the following example −
#include <stdio.h>
int main(){
   typedef enum {false, true} BOOL;
   BOOL x = true;
   BOOL y  = false;
   printf ("%d\n", x);
   printf ("%d\n", y);
}
Here too, you will get the same output −
Output
1
0
Example 2
We can even use the enumerated constants in the decision-making or loop statements −
#include <stdio.h>
int main(){
   typedef enum {false, true} BOOL;
   int i = 0;
   while(true){
      i++;
      printf("%d\n", i);
      if(i >= 5)
         break;
   }
   return 0;
}
Output
When you run this code, it will produce the following output −
1
2
3
4
5
Boolean Values with #define
The #define preprocessor directive is used to define constants. We can use this to define the Boolean constants, FALSE as 0 and TRUE as 1.
Example
Take a look at the following example −
#include <stdio.h>
#define FALSE 0
#define TRUE 1
int main(){
   printf("False: %d \n True: %d", FALSE, TRUE);
   return 0;
}
Output
Run the code and check its output −
False: 0
 True: 1
Boolean Type in stdbool.h
The C99 standard of C has introduced the stdbool.h header file. It contains the definition of bool type, which actually is a typedef alias for _bool type. It also defines the macros true which expands to 1, and false which expands to 0.
Example 1
We can use the bool type as follows −
#include <stdio.h>
#include <stdbool.h>
int main(){
   bool a = true;
   bool b = false;
   printf("True: %d\n", a);
   printf("False: %d", b);
   return 0;
}
Output
On executing this code, you will get the following output −
True: 1
False: 0
Example 2
We can use bool type variables in logical expressions too, as shown in the following example −
#include <stdio.h>
#include <stdbool.h>
int main(){
   bool x;
   x = 10 > 5;
   if(x)
      printf("x is True\n");
   else
      printf("x is False\n");
   bool y;
   int marks = 40;
   y = marks > 50;
   if(y)
      printf("Result: Pass\n");
   else
      printf("Result: Fail\n");
}
Output
Run the code and check its output −
x is True
Result: Fail
Example 3
Let us implement a while loop with the help of a bool variable −
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main(void){
   bool loop = true;
   int i = 0;
   while(loop){
      i++;
      printf("i: %d \n", i);
      if (i >= 5)
         loop = false;
   }
   printf("Loop stopped!\n");
   return EXIT_SUCCESS;
}
Output
When you run this code, it will produce the following output −
i: 1
i: 2
i: 3
i: 4
i: 5
Loop stopped!