Не выводится сообщение в STDOUT

Не понимаю, почему не выводится текст при помощи puts в основной функции main, когда в другой функции encode_file указан goto? Проблему решил, убрав goto. Однако стало интересно, почему он мешает выводу текста в консоль после функции encode_file?

static void encode_file(char *enc_data, unsigned int enc_len)
{
    int fd = 0;

    if((fd = open("out.dat", O_WRONLY | O_CREAT | O_EXCL, 0)) == -1) {
        perror("Create encode file");
        goto panic;
    }
    if((write(fd, enc_data, enc_len)) == -1) {
        perror("Write encode file");
        goto panic;
    }

    close(fd);
    fd = 0; 
panic:
    close(fd);
    exit(EXIT_FAILURE);
}

В main:

int main(int argc, char **argv)
{
    /* Какой то код */

    printf("[*] Create encrypt file...\n");
    encode_file(enc_data, file_len);

    puts("[*] Encrypt file success");

    free(enc_data);    
    return 0;
}

Ответы (1 шт):

Автор решения: Solt

Потому, что goto ведёт к выходу из программы.

А что значит "Проблему решил, убрав goto."? Как заметили предыдущие комментаторы, программа заканчивается в любом случае. Может при убирании goto была поправлена ещё какая-то логика?

→ Ссылка