Frage zu Modulen / Headern



  • Hallo,

    Angenommen ich habe zwei Module, das Modul main.c und das Modul funktionen.c. Die Namen stehen für den Inhalt.

    Es gibt ja mehrere Möglichkeiten wie ich in der Main.c-Übersetzungeinheit auf die Funktionen aus funktionen.c zugreifen kann.

    1.) Eine Headerdatei funktionen.h schreiben und dieses in main.c includieren. Beim compilieren muss dann mit gcc -o test main.c funktionen.c kompiliert werden.

    2.) In main.c einfach funktionen.c inkludieren und wieder mit gcc... test main.c funktionen.c kompilieren.

    3.) In main.c mit extern addiere(int x); und dann ebenfalls wieder mit gcc -o test main.c funktionen.c kompilieren...

    Also irgendwie klappt das alles! Was sind ja jetzt die Unterschiede? 😮

    Vielen Dank!



  • Bei 1) und 3) kannst du auch die c-Dateien getrennt übersetzen und am Ende zusammenlinken:
    gcc -c main.c
    gcc -c funktionen.c
    gcc -o test main.o funktionen.o

    Das macht man normalerweise nicht von Hand, sondern mit einem Makefile. make compiliert dann bei Änderungen auch nur die Dateien, die wirklich neu compiliert werden müssen.

    1. hat dann gegenüber 1) den Nachteil, dass die Deklaration in jeder Datei, die etwas aus funktionen.c nutzen möchte, wiederholt werden müssen. Passiert dabei ein Fehler, oder ändert sich die Definition in funktionen.c ohne dass die Deklarationen angepasst werden, merkst du davon nichts. Zumindest nicht bevor das Programm läuft. Schlechte Idee.

    Fazit: 1) 👍



  • kthesun schrieb:

    2.) In main.c einfach funktionen.c inkludieren und wieder mit gcc... test main.c funktionen.c kompilieren.

    Ein Unterschied ist, dass man *das* *nicht* macht. Man inkludiert keine *.c Dateien, basta.


Log in to reply