A main
função deve ser declarada como uma função não membro no espaço para nome global. Isso significa que ela não pode ser uma função de membro estática ou não estática de uma classe, nem pode ser colocada em um espaço para nome (mesmo no espaço para nome sem nome).
O nome main
não está reservado no C ++, exceto como uma função no espaço para nome global. Você pode declarar outras entidades nomeadas main
, incluindo, entre outras coisas, classes, variáveis, enumerações, funções de membro e funções de não membro que não estão no espaço de nomes global.
Você pode declarar uma função nomeada main
como uma função membro ou em um espaço para nome, mas essa função não seria a main
função que designa onde o programa é iniciado.
A main
função não pode ser declarada como static
ou inline
. Também não pode ser sobrecarregado; pode haver apenas uma função nomeada main
no espaço para nome global.
A main
função não pode ser usada no seu programa: você não pode chamar a main
função de qualquer lugar do seu código, nem o endereço dele.
O tipo de retorno de main
deve serint
. Nenhum outro tipo de retorno é permitido (esta regra está em negrito porque é muito comum ver programas incorretos que são declarados main
com um tipo de retorno void
; essa é provavelmente a regra mais frequentemente violada em relação à main
função).
Há duas declarações main
que devem ser permitidas:
int main() // (1)
int main(int, char*[]) // (2)
Em (1) , não há parâmetros.
Em (2) , existem dois parâmetros e eles são nomeados convencionalmente argc
e argv
, respectivamente. argv
é um ponteiro para uma matriz de seqüências de caracteres C representando os argumentos do programa. argc
é o número de argumentos na argv
matriz.
Geralmente, argv[0]
contém o nome do programa, mas esse nem sempre é o caso. argv[argc]
é garantido para ser um ponteiro nulo.
Observe que, como um argumento do tipo array (como char*[]
) é realmente apenas um argumento do tipo ponteiro disfarçado, as duas seguintes são maneiras válidas de escrever (2) e ambas significam exatamente a mesma coisa:
int main(int argc, char* argv[])
int main(int argc, char** argv)
Algumas implementações podem permitir outros tipos e números de parâmetros; você precisaria verificar a documentação da sua implementação para ver o que ela suporta.
main()
é esperado que retorne zero para indicar sucesso e diferente de zero para indicar falha. Não é necessário que você escreva explicitamente uma return
declaração main()
: se você deixar main()
retornar sem uma return
declaração explícita , será o mesmo que se você tivesse escrito return 0;
. As duas main()
funções a seguir têm o mesmo comportamento:
int main() { }
int main() { return 0; }
Existem duas macros EXIT_SUCCESS
e EXIT_FAILURE
, definidas nela, <cstdlib>
também podem ser retornadas main()
para indicar sucesso e falha, respectivamente.
O valor retornado por main()
é passado para a exit()
função, que finaliza o programa.
Observe que tudo isso se aplica somente ao compilar para um ambiente hospedado (informalmente, um ambiente em que você tenha uma biblioteca padrão completa e um SO executando o seu programa). Também é possível compilar um programa C ++ para um ambiente independente (por exemplo, alguns tipos de sistemas incorporados), caso em que a inicialização e a finalização são totalmente definidas pela implementação e uma main()
função pode nem ser necessária. Porém, se você estiver escrevendo C ++ para um sistema operacional de desktop moderno, estará compilando para um ambiente hospedado.
main
retornar em C e C ++ .