# What is true and what is false?

In C, the concepts of true and false are represented using integers. The integer value 0 is considered false, and any non-zero value is considered true. However, C99 introduced the `<stdbool.h>` header, which defines the `_Bool` type and introduces the `bool` type and the constants `true` and `false`. Here are examples using both approaches:

### Using integers:

```c
#include <stdio.h>

int main() {
    // Using integers
    int trueValue = 1;
    int falseValue = 0;

    if (trueValue) {
        printf("This statement is true\n");
    } else {
        printf("This statement is false\n");
    }

    if (falseValue) {
        printf("This statement is true\n");
    } else {
        printf("This statement is false\n");
    }

    return 0;
}
```

In this example, the conditions inside the `if` statements are evaluated based on the truthiness or falsiness of the integer values.

### Using `<stdbool.h>`:

```c
#include <stdio.h>
#include <stdbool.h>

int main() {
    // Using <stdbool.h>
    bool trueValue = true;
    bool falseValue = false;

    if (trueValue) {
        printf("This statement is true\n");
    } else {
        printf("This statement is false\n");
    }

    if (falseValue) {
        printf("This statement is true\n");
    } else {
        printf("This statement is false\n");
    }

    return 0;
}
```

Here, the `<stdbool.h>` header is included, and the `bool` type is used with `true` and `false` constants. This makes the code more readable and expressive.

Both examples will produce the same output:

```plaintext
This statement is true
This statement is false
```

In C, it's common to see the integer approach, especially in older codebases. However, using `bool` from `<stdbool.h>` provides better readability and is preferred in modern C programming.
