Eu gostaria de acrescentar às respostas já fornecidas, citando os padrões de linguagem atuais.
É 'int main;' um programa C válido?
Resposta curta (minha opinião): somente se sua implementação usar um "ambiente de execução independente".
Todas as citações seguintes de C11
5. Meio Ambiente
Uma implementação traduz arquivos fonte C e executa programas C em dois ambientes de sistema de processamento de dados, que serão chamados de ambiente de tradução e ambiente de execução [...]
5.1.2 Ambientes de execução
Dois ambientes de execução são definidos: independente e hospedado. Em ambos os casos, a inicialização do programa ocorre quando uma função C designada é chamada pelo ambiente de execução.
5.1.2.1 Ambiente autônomo
Em um ambiente independente (no qual a execução do programa C pode ocorrer sem nenhum benefício de um sistema operacional), o nome e o tipo da função chamada na inicialização do programa são definidos pela implementação.
5.1.2.2 Ambiente hospedado
Um ambiente hospedado não precisa ser fornecido, mas deve estar em conformidade com as seguintes especificações, se houver.
5.1.2.2.1 Inicialização do programa
A função chamada na inicialização do programa é chamada de principal . [...] Deve ser definido com um tipo de retorno de int e sem parâmetros [...] ou com dois parâmetros [...] ou equivalente ou de alguma outra maneira definida pela implementação.
Destes, o seguinte é observado:
- Um programa C11 pode ter um ambiente de execução independente ou hospedado e ser válido.
- Se tiver um autônomo, não precisa haver uma função principal.
- Caso contrário, deve haver um com um valor de retorno do tipo int .
Em um ambiente de execução independente, eu diria que é um programa válido que não permite que a inicialização aconteça, porque não há nenhuma função presente para isso, conforme exigido em 5.1.2. Em um ambiente de execução hospedado, embora seu código introduza um objeto denominado main , ele não pode fornecer um valor de retorno, então eu argumentaria que não é um programa válido neste sentido, embora alguém pudesse argumentar antes que se o programa não fosse destinado a ser executado (em pode querer fornecer dados apenas, por exemplo), então ele simplesmente não permite fazer exatamente isso.
É 'int main;' um programa C ++ válido?
Resposta curta (minha opinião): somente se sua implementação usar um "ambiente de execução independente".
Citação de C ++ 14
3.6.1 Função principal
Um programa deve conter uma função global chamada main, que é o início designado do programa. É definido pela implementação se um programa em um ambiente independente é necessário para definir uma função principal. [...] Deve obrigatoriamente ter um tipo de retorno do tipo int, mas caso contrário, seu tipo é definido pela implementação. [...] O nome main não é reservado de outra forma.
Aqui, ao contrário do padrão C11, menos restrições se aplicam ao ambiente de execução independente, já que nenhuma função de inicialização é mencionada, enquanto para um ambiente de execução hospedado, o caso é praticamente o mesmo que para C11.
Novamente, eu diria que, para o caso hospedado, seu código não é um programa C ++ 14 válido, mas tenho certeza de que é para o caso independente.
Como minha resposta considera apenas o ambiente de execução , acho que a resposta de dasblinkenlicht entra em cena, já que a mutilação de nomes que ocorre no ambiente de tradução ocorre de antemão. Aqui, não estou tão certo de que as citações acima sejam observadas tão estritamente.
gcc -std=c99 -pedantic ...