Czy dobrą praktyką jest oddzielanie głównej funkcji w osobnym pliku?

14

Czy dobrą praktyką jest posiadanie pliku main.c, który zawiera tylko główną funkcję, a nie żadnych innych funkcji, aby wszystkie pozostałe funkcje mogły być połączone?

Jeśli nie ma ostatecznej reguły, kiedy warto to zrobić, a nie zrobić?

Michael
źródło

Odpowiedzi:

15

Idealnie byłoby, gdyby wszystkie prace, które można traktować jako część kodu wielokrotnego użytku, powinny być tworzone w formie biblioteki . Bilans pracy, to aplikacja, która powinna być oddzielna, gdzie main()będzie mieszkać.

Ale main()sam nie musi siedzieć w izolacji. Funkcje takie jak parse_arguments(argc,argv) powinny być razem z głównym, a następnie oddzielne.

Dipan Mehta
źródło
7

Nasz standard kodowania wymaga, aby main () był w main.c. Inne metody w main.c są na ogół wysokopoziomowymi programami obsługi błędów i funkcjami pomocniczymi dla main (patrz @Dipan odpowiedź „parse_arguments”, a także rzeczy takie jak „display_help” itp.

Dobrą zasadą jest, aby gdy funcion zaczął robić coś więcej niż tylko obsługę uruchomionej aplikacji i logikę biznesową, nadszedł czas, aby była poza głównym. C

mattnz
źródło
4

Istnieją dwie podstawowe zasady:

  1. Czytelnik nie powinien zastanawiać się, gdzie ukryłeś main ().
  2. main () nie powinien zawierać niepotrzebnego bałaganu.

Wdrożenie standardu kodowania stwierdzającego, że main () powinno zawsze znajdować się w pliku o nazwie main.c jest zarówno dobrą, jak i powszechną praktyką. Ten plik, podobnie jak sam main (), nie powinien zawierać niepotrzebnego bałaganu.

Idealnie main () i main.c powinny zawierać tylko następujące elementy

  • Obejmuje pliki nagłówków dla całego programu.
  • Kod parsujący argument argv, argc.
  • W systemach bez hosta: krytyczne konfiguracje rejestru, konfiguracja wskaźnika stosu itp. Ale tylko jeśli main () jest pierwszym punktem wejścia programu.
  • Wywołania w celu uruchomienia systemu operacyjnego lub pętli wywołującej maszynę stanu programu lub w hostowanych systemach komputerowych, tworzenie i inicjowanie okien związanych z głównym wątkiem GUI.
  • Wewnętrzne (statyczne) funkcje wywoływane z main (), obsługujące dowolne z powyższych.
  • W systemie hostowanym: zwróć 0.

źródło
1

Czysty punkt wejścia w oddzielnym pliku sprawia, że ​​przepływ kodu jest łatwy do zrozumienia i utrzymania. Zawsze miałem ten zwyczaj trzymania bardzo małej i zwięzłej funkcji main () w innym pliku niż to, gdzie mogę śledzić kroki programu. Ze względu na czystość dobrze jest trzymać je osobno.

Wajih
źródło