Me gustaría agregar a las respuestas ya dadas citando los estándares reales del idioma.
Es 'int main;' un programa C válido?
Respuesta corta (mi opinión): solo si su implementación utiliza un "entorno de ejecución independiente".
Todas las citas siguientes de C11
5. Medio ambiente
Una implementación traduce archivos fuente C y ejecuta programas C en dos entornos de sistema de procesamiento de datos, que se denominarán entorno de traducción y entorno de ejecución [...]
5.1.2 Entornos de ejecución
Se definen dos entornos de ejecución: autónomo y alojado. En ambos casos, el inicio del programa se produce cuando el entorno de ejecución llama a una función C designada.
5.1.2.1 Entorno independiente
En un entorno independiente (en el que la ejecución del programa en C puede tener lugar sin ningún beneficio de un sistema operativo), el nombre y el tipo de la función llamada al inicio del programa están definidos por la implementación.
5.1.2.2 Entorno alojado
No es necesario proporcionar un entorno alojado, pero deberá cumplir con las siguientes especificaciones si están presentes.
5.1.2.2.1 Inicio del programa
La función llamada al inicio del programa se denomina main . [...] Se definirá con un tipo de retorno de int y sin parámetros [...] o con dos parámetros [...] o equivalentes o de alguna otra manera definida por la implementación.
De estos, se observa lo siguiente:
- Un programa C11 puede tener un entorno de ejecución independiente o alojado y ser válido.
- Si tiene uno independiente, no es necesario que exista una función principal.
- De lo contrario, debe haber uno con un valor de retorno de tipo int .
En un entorno de ejecución independiente, yo diría que es un programa válido que no permite que suceda el inicio, porque no hay una función presente para eso como se requiere en 5.1.2. En un entorno de ejecución alojado, mientras su código introduce un objeto llamado main , no puede proporcionar un valor de retorno, por lo que yo diría que no es un programa válido en este sentido, aunque también se podría argumentar como antes que si el programa no es está destinado a ser ejecutado (es posible que on desee proporcionar datos solo, por ejemplo), entonces simplemente no permite hacer eso.
Es 'int main;' un programa C ++ válido?
Respuesta corta (mi opinión): solo si su implementación utiliza un "entorno de ejecución independiente".
Cita de C ++ 14
3.6.1 Función principal
Un programa debe contener una función global llamada main, que es el inicio designado del programa. Se define por implementación si se requiere un programa en un entorno independiente para definir una función principal. [...] Tendrá un tipo de retorno de tipo int, pero de lo contrario su tipo está definido por la implementación. [...] El nombre principal no está reservado de otra manera.
Aquí, a diferencia del estándar C11, se aplican menos restricciones al entorno de ejecución independiente, ya que no se menciona ninguna función de inicio, mientras que para un entorno de ejecución alojado, el caso es prácticamente el mismo que para C11.
Nuevamente, diría que para el caso alojado, su código no es un programa C ++ 14 válido, pero estoy seguro de que es para el caso independiente.
Dado que mi respuesta solo considera el entorno de ejecución , creo que la respuesta de dasblinkenlicht entra en juego, ya que la alteración de nombres que se produce en el entorno de traducción ocurre de antemano. Aquí, no estoy tan seguro de que las citas anteriores se cumplan de manera tan estricta.
gcc -std=c99 -pedantic ...