Je voudrais ajouter aux réponses déjà données en citant les normes linguistiques actuelles.
Est 'int main;' un programme C valide?
Réponse courte (mon avis): uniquement si votre implémentation utilise un "environnement d'exécution autonome".
Toutes les citations suivantes de C11
5. Environnement
Une implémentation traduit des fichiers source C et exécute des programmes C dans deux environnements de système de traitement de données, qui seront appelés environnement de traduction et environnement d'exécution [...]
5.1.2 Environnements d'exécution
Deux environnements d'exécution sont définis: autonome et hébergé. Dans les deux cas, le démarrage du programme se produit lorsqu'une fonction C désignée est appelée par l'environnement d'exécution.
5.1.2.1 Environnement autonome
Dans un environnement autonome (dans lequel l'exécution du programme C peut avoir lieu sans aucun avantage d'un système d'exploitation), le nom et le type de la fonction appelée au démarrage du programme sont définis par l'implémentation.
5.1.2.2 Environnement hébergé
Un environnement hébergé n'a pas besoin d'être fourni, mais doit être conforme aux spécifications suivantes, le cas échéant.
5.1.2.2.1 Démarrage du programme
La fonction appelée au démarrage du programme est nommée main . [...] Il doit être défini avec un type de retour int et sans paramètres [...] ou avec deux paramètres [...] ou équivalent ou d'une autre manière définie par l'implémentation.
À partir de ceux-ci, on observe ce qui suit:
- Un programme C11 peut avoir un environnement d'exécution autonome ou hébergé et être valide.
- S'il en a une autonome, il n'est pas nécessaire qu'il existe une fonction principale.
- Sinon, il doit y en avoir un avec une valeur de retour de type int .
Dans un environnement d'exécution autonome, je dirais qu'il s'agit d'un programme valide qui ne permet pas le démarrage, car il n'y a pas de fonction présente pour cela comme requis dans 5.1.2. Dans un environnement d'exécution hébergé, alors que votre code introduit un objet nommé main , il ne peut pas fournir de valeur de retour, je dirais donc que ce n'est pas un programme valide dans ce sens, bien que l'on puisse également argumenter comme avant que si le programme ne l'est pas destiné à être exécuté (on peut vouloir fournir des données uniquement par exemple), alors cela ne permet tout simplement pas de faire cela.
Est 'int main;' un programme C ++ valide?
Réponse courte (mon avis): uniquement si votre implémentation utilise un "environnement d'exécution autonome".
Citation de C ++ 14
3.6.1 Fonction principale
Un programme doit contenir une fonction globale appelée main, qui est le début désigné du programme. Il est défini par l'implémentation si un programme dans un environnement autonome est nécessaire pour définir une fonction principale. [...] Il doit avoir un type de retour de type int, mais sinon, son type est défini par l'implémentation. [...] Le nom main n'est pas réservé autrement.
Ici, contrairement à la norme C11, moins de restrictions s'appliquent à l'environnement d'exécution autonome, car aucune fonction de démarrage n'est mentionnée du tout, tandis que pour un environnement d'exécution hébergé, le cas est à peu près le même que pour C11.
Encore une fois, je dirais que pour le cas hébergé, votre code n'est pas un programme C ++ 14 valide, mais je suis sûr que c'est pour le cas autonome.
Étant donné que ma réponse ne prend en compte que l' environnement d' exécution , je pense que la réponse de dasblinkenlicht entre en jeu, car la modification des noms se produisant dans l' environnement de traduction se produit à l'avance. Ici, je ne suis pas si sûr que les citations ci-dessus soient observées de manière aussi stricte.
gcc -std=c99 -pedantic ...