Est-ce une bonne pratique de conserver la fonction principale séparément dans son propre fichier?

14

Est-ce une bonne pratique d'avoir un fichier main.c qui a juste la fonction principale et aucune autre fonction pour que toutes les autres fonctions puissent être interfacées?

S'il n'y a pas de règle définitive, quand est-il bon de le faire et de ne pas le faire?

Michael
la source

Réponses:

15

Idéalement, tout travail pouvant être considéré comme faisant partie d'un code réutilisable devrait être créé sous forme de bibliothèque . Le travail d'équilibre, est une application qui devrait être séparée où main()résidera.

Mais main()seul ne doit pas rester isolé. Des fonctions comme parse_arguments(argc,argv) devraient être avec main plutôt que séparées.

Dipan Mehta
la source
7

Notre norme de codage requiert que main () se trouve dans main.c. D'autres méthodes dans main.c ont tendance à être des gestionnaires d'erreurs de haut niveau et des fonctions d'assistance pour main (reportez-vous à la réponse @Dipan "parse_arguments", ainsi que des choses comme "display_help", etc.

Une bonne règle à suivre est quand une fonction commence à faire plus que prendre en charge l'application en cours d'exécution et commencer à faire de la logique métier, il est temps qu'elle ne soit plus utilisée.

mattnz
la source
4

Il y a deux règles d'or:

  1. Le lecteur ne devrait pas avoir à se demander où vous avez caché main ().
  2. main () ne doit pas contenir de fouillis non pertinents.

Mettre en œuvre une norme de codage indiquant que main () doit toujours être situé dans un fichier appelé main.c est à la fois une bonne et une pratique courante. Ce fichier, ainsi que main () lui-même, ne doit pas contenir de fouillis inutiles.

Idéalement, main () et main.c ne devraient contenir que les éléments suivants

  • Comprend des fichiers d'en-tête à l'échelle du programme.
  • Code d'analyse d'argument argv, argc.
  • Sur les systèmes sans hôte: configurations de registres critiques, configuration de pointeur de pile, etc. Mais uniquement si main () est le premier point d'entrée du programme.
  • Appels pour démarrer le système d'exploitation, ou une boucle appelant la machine d'état du programme, ou dans les systèmes de bureau hébergés, création et initialisation de fenêtres liées au thread principal de l'interface graphique.
  • Fonctions internes (statiques) qui sont appelées à partir de main (), gérant l'une des fonctions ci-dessus.
  • Sur un système hébergé: retournez 0.

la source
1

Un point d'entrée propre dans un fichier séparé facilite la compréhension et la maintenance du flux de code. J'ai toujours pris l'habitude de conserver une fonction main () très petite et concise dans un fichier différent à partir duquel je peux suivre les étapes du programme. Par souci de propreté, il est bon de le séparer.

Wajih
la source