Wie verbinden Sie mehrere Dateien Implementierung in C
Habe ich eine Reihe von .c
- Dateien, d.h. die Dateien Implementierung sagen
- main.c
- A. c
- B. c
Denen Funktionen aus Dateien aufrufen kann eine beliebige Funktion aus einer anderen Dateien. Meine Frage, brauche ich ein .h
d.h. header-Datei für jedes von A und B ist die Umsetzung, wo jeder header-Datei die definition der ALLE die Funktionen, die in A oder B.
Auch, wichtigsten.c haben beide A.h
und B.h #included
es?
Wenn jemand endlich klar machen, auch, wie ich später kompilieren Sie und führen Sie mehrere Dateien in das terminal.
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Header Inhalt
Header
A.h
fürA.c
sollte nur die Informationen enthalten, die notwendig ist für den externen code mit den Einrichtungen definiert, inA.c
. Es sollte nicht erklären, statische Funktionen; es sollte nicht deklarieren von statischen Variablen; es sollte nicht deklarieren Sie die interne Typen (Typen verwendet werden, die nur inA.c
). Es sollte sicherstellen, dass eine Datei nur#include "A.h"
und dann machen Sie vollen Gebrauch von den Einrichtungen veröffentlicht, die vonA.c
. Es sollte eigenständig sein, idempotent (so können Sie es zweimal ohne Kompilierungsfehler) und minimal. Können Sie einfach überprüfen, dass der header ist eigenständig schriftlich#include "A.h"
als die ersten#include
Linie inA.c
; Sie können überprüfen, dass es ist idempotent, indem Sie ihn zweimal (aber das ist besser als ein separates-test). Wenn es nicht kompilierbar ist, es ist nicht self-contained. Ebenso fürB.h
undB.c
.Weitere Informationen zu Header-und-standards, siehe 'Sollte ich mit
#include
- Header?', der auf eine NASA coding standard, und 'Verlinkung gegen eine statische Bibliothek', die enthält ein Skriptchkhdr
dass ich zum testen verwenden Selbständigkeit und idempotenz.Verknüpfen
Beachten Sie, dass
main.o
hängtmain.c
,A.h
undB.h
, abermain.c
selbst hängt nicht von der Header.Wenn es um die Zusammenstellung, die Sie verwenden können:
Wenn Sie andere Optionen, fügen Sie Sie (die meisten Flaggen am start; Bibliotheken, am Ende, nach dem source-code). Sie können auch kompilieren Sie jede Datei in Objekt-code getrennt und verknüpfen Sie dann die Objekt-Dateien zusammen:
Müssen Sie eine header-Datei nur, wenn das, was erklärt wird, in einem
.c
- Datei ist erforderlich, in einem anderen.c
Datei.Generell können Sie eine header-Datei für jede source-Datei, in die Sie exportieren alle Funktionen erklärt oder
extern
Symbole.In der Praxis werden Sie nicht immer brauchen, um zu exportieren, jede Funktion oder jede variable, nur die, die erforderlich sind, von einer anderen source-Datei, und Sie müssen es nur in die gewünschte Datei (und in der Quelle gekoppelt mit den spezifischen header-Datei).
Wenn Sie versuchen zu verstehen, wie es funktioniert denken Sie nur an die Tatsache, dass jeder Quellcode-Datei kompiliert wird, die auf seine eigene, so, wenn es sich auf etwas, das nicht deklariert ist direkt in der Quelle-Datei, dann muss es deklariert werden, die über eine header-Datei. Auf diese Weise kann der compiler wissen, dass alles, was existiert, und es ist richtig getippt.
Es würde davon abhängen, den compiler, aber nur dann, wenn Sie gcc verwenden, könnten Sie so etwas wie dieses:
Blick auf http://www.network-theory.co.uk/docs/gccintro/gccintro_11.html (erste google-Antwort) für mehr details. Sie es kompilieren konnte in mehrere Objekt-Dateien/Bibliotheken: