Compilando código c com bool sem usar o padrão c99

Tentei compilar um código usando uma variável bool em C e incluí o cabeçalho stdbool, mas quando o compilei, não especifiquei que desejo compilá-lo com o padrão c99 (por isso foi compilado com ANSI C padrão), mas funcionou de qualquer maneira. Eu queria saber por que isso? Aqui está o 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;
}

Também outra pergunta referente ao meu código. Na parte em que você está sendo perguntado se deseja sair do programa, testei-o com a seguinte entrada: n n y

E, por alguma razão, imprimiu para o console a pergunta pela quarta vez e não vejo o porquê. Eu defini-o para que, se a entrada for Y / y, a próxima iteração no loop while não deva ocorrer, mas por algum motivo a imprimiu novamente, alguém poderia me explicar o que fiz de errado?

EDIT: Então, eu editei o código um pouco, tentei testar coisas novas e notei que, com o seguinte código, se a entrada do usuário for Y / y, não sairá do loop:

#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;
}

Eu não sei por que fiz isso, mas adicionei uma chamada getchar () antes do loop while e tentei compilá-la dessa maneira e, em seguida, o programa funcionou bem, daí presumo que as funções fgets \ scanf interfiram na função getchar mas não sei por que alguém poderia explicar?

questionAnswers(3)

yourAnswerToTheQuestion