Bem, poderia .
Por exemplo, no dialeto C usado no sistema operacional Plan 9main
é normalmente declarado como uma void
função, mas o status de saída é retornado ao ambiente de chamada passando um ponteiro de sequência para a exits()
função. A sequência vazia indica sucesso e qualquer sequência não vazia indica algum tipo de falha. Isso poderia ter sido implementado main
retornando um char*
resultado.
E certamente seria possível implementar um sistema com um status de saída float
ou double
.
Então porque int
? É apenas uma questão de convenção - e há um valor tremendo em ter sistemas operacionais e programas executados sob elas obedecer a uma convenção comum.
A convenção do Unix é usar um código de status inteiro, com 0 indicando sucesso e falha diferente de zero (porque normalmente há apenas uma maneira de obter sucesso, mas várias maneiras de falhar). Não sei se essa convenção se originou no Unix; Eu suspeito que veio de sistemas operacionais anteriores.
Ponto flutuante seria uma convenção mais difícil, porque (a) o suporte a ponto flutuante não é universal, (b) é mais difícil definir um mapeamento entre valores de ponto flutuante e condições de erro, (c) sistemas diferentes usam diferentes flutuantes. representações de pontos e (d) imagine a diversão de rastrear um erro de arredondamento no status de saída do seu programa. Os números inteiros, por outro lado, se prestam muito bem à enumeração de códigos de erro.
O Plano 9, como mencionei, usa cadeias de caracteres, mas isso impõe alguma complexidade para gerenciamento de memória, codificação de caracteres etc. Era, até onde eu sei, uma nova idéia quando o Plano 9 o implementou e não substituiu os existentes. convenção generalizada.
(Aliás, em C ++ sómain
pode retornar , e em C é permitido apenas se o compilador o suportar especificamente. Muitos compiladores não reclamam muito alto se você escreve , mas é apenas um pequeno exagero dizer que está errado .)int
void main
void main