Por que você precederia a função main () em C com um tipo de dados? [duplicado]

Esta pergunta já tem uma resposta aqui:

O que main () deve retornar em C e C ++? 18 respostas

Muitos estão familiarizados com o programa hello world em C:

#include <stdio.h>

main ()
{
    printf ("hello world");
    return 0;
}

Por que alguns precedem omain() funcionar comint como em:

int main()

Além disso, eu vi a palavravoid inserido dentro do() como em:

int main(void)

Parece digitação extra por nada, mas talvez seja uma prática recomendada que pague dividendos em outras situações?

Além disso, por que precedermain() com um int se você estiver retornando uma sequência de caracteres? Se alguma coisa, seria de esperar:

char main(void)

Também estou confuso sobre por que retornamos 0 no final da função.

questionAnswers(8)

yourAnswerToTheQuestion