Compilar código c con bool sin usar el estándar c99

Intenté compilar un código usando una variable bool en C e incluí el encabezado stdbool pero cuando lo compilé no especifiqué que quiero compilarlo con el estándar c99 (por lo que fue compilado con ANSI C estándar) pero funcionó de todos modos. Me preguntaba por qué es eso? Aquí está el código:

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

int main() {
    char name[20];
    printf("What's your name ? ");
    gets(name);
    printf("Nice to meet you %s.\n", name);
    bool exit = false;
    char c;
    printf("Do you wish to exit the program ? (Y/N) ");
    while (!exit) {
        c = getchar();
        if (c == '\n') {
            continue;
        }
        printf("Do you wish to exit the program ? (Y/N) ");
        if (c == 'Y' || c == 'y') {
            exit = true;
        }
    }
    printf("Have a nice day %s\n", name);
    return 0;
}

También otra pregunta con respecto a mi código. En la parte donde se le pregunta si desea salir del programa, lo probé con la siguiente entrada: n n y

Y por alguna razón imprimió en la consola la pregunta por cuarta vez y no veo por qué. Lo configuré para que si la entrada es Y / y la siguiente iteración en el ciclo while no debería tener lugar, pero por alguna razón lo imprimió nuevamente, ¿alguien podría explicarme qué hice mal?

EDITAR: edité el código un poco e intenté probar cosas nuevas y me di cuenta de que con el siguiente código si la entrada del usuario es Y / y no saldrá del bucle:

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

int main(int argc, char* argv[]) {
    for(int i = 0; i < argc; i++)
        printf("argv[%d] = %s\n", i, argv[i]);
    char name[20];
    printf("What's your name ? ");
    gets(name);
    char lastname[20];
    printf("%s what's your last name ? ", name);
    fgets(lastname, 20, stdin);
    int age;
    printf("%s %s what's your age? ", name, lastname);
    scanf("%d", &age);
    bool exit = false;
    char c;
    while (!exit) {
        printf("Do you wish to exit the program ? (Y/N) ");
        c = getchar();
        getchar();
        if (c == 'Y' || c == 'y')
            exit = true;
    }
    printf("Have a nice day %s %s.\n", name, lastname);
    return 0;
}

No sé por qué lo hice, pero agregué una llamada getchar () antes del ciclo while e intenté compilarlo de esta manera y luego el programa funcionó bien, a partir de esto asumo que las funciones fgets \ scanf interfieren con la función getchar pero no estoy seguro de por qué alguien podría explicar?

Respuestas a la pregunta(3)

Su respuesta a la pregunta