Se uma função não retornar nenhum valor, com um tipo de retorno válido, é aceitável que o compilador jogue lix

Se uma função tiver um tipo de retorno diferente devoid, e a função não retorna nada, acho que o compilador retorna um valor de lixo (possivelmente visto como um valor não inicializado). Isso acontece no momento da compilação, então por que não deveria gerar um erro?

Por exemplo

int func1() {
    return; // error
}

int func2() {
    // does not return anything
}

O segundofunc2 deve gerar um erro, mas isso não ocorre. Existe uma razão para isso? Meu pensamento era tal que, ele pode ser visto como um valor não inicializado; portanto, se precisarmos lançar um erro no segundo caso, precisamos gerar um erro, se um valor não for inicializado, digamos

  int i;  // error
  int i = 6;  // okay

Alguns pensamentos, ou esta é uma pergunta duplicada? Eu aprecio sua ajuda

questionAnswers(8)

yourAnswerToTheQuestion