2016-08-05 8 views
-2

Vor kurzem habe ich mit der TIVA C-Serie Launchpad-Platine, die einen Cortex-M4-Chip hat, gearbeitet. Ich verwende das Code Composer Studio als meine IDE.Verwirrung über die Einbeziehung von .c und .h Dateien

Es ist viel Verwirrung im Gange, denn durch Versuch und Irrtum sehe ich, dass, um bestimmte Funktionen, die der Chip-Hersteller bietet, muss ich die .c-Datei anstelle der Aufnahme der .h-Datei enthalten .

Das hat mich überrascht und ich gebe zu, dass ich kein Experte Programmierer oder ein Experte, wenn es um Compiler-Design geht. Aber weiß jemand, warum ein Compiler die .c-Datei benötigt, anstatt die .h-Datei zu benötigen?

Die .h-Datei wird weiterhin verwendet, da sie Definitionen enthält, die für die .c-Datei erforderlich sind.

Vielleicht eine bessere Frage dies auch sein mag:

Wenn es eine .h-Datei ist und eine C-Datei, haben Sie die C-Datei im Code enthalten oder beziehen Sie die .h-Datei?

Meine Trial-and-Error-Übung sagt mir, dass Sie die .c-Datei enthalten müssen, aber ich bin völlig blind, was die tatsächlichen Regeln sind.

Es tut uns leid, wenn ein Teil davon zu vage ist. Ich wäre völlig in Ordnung, meine main.c-Datei zu teilen, so dass Sie sehen können, wie ich die Dateien einfügte, aber ich fühlte, dass meine Frage eher eine Frage bezüglich der allgemeinen Regeln für die Aufnahme von Dateien ist, wenn sowohl eine .h als auch eine .c-Datei.

Vielen Dank für jede Zeit, die Sie mir helfen können, dieses Problem zu verstehen.

EDIT: Warum die Down-Stimmen? Ich dachte, hier zu Hilfe zu kommen, worum ging es in diesem Ort?

+0

Sind Sie sicher, dass Sie die .c-Datei einschließen müssen? Seien Sie vorsichtig bei [Das XY-Problem] (http://xyproblem.info/). – MikeCAT

+1

Ich denke, das Problem könnte sein, dass Sie die c-Dateien nicht erstellen oder verknüpfen. –

+0

Der Tooltip für den Downvote-Button lautet "Diese Frage zeigt keinen Forschungsaufwand; sie ist unklar oder nicht sinnvoll". Ich habe nicht runtergestimmt, aber ich könnte glauben, dass einige von Ihnen hier Ihre Frage als Mangel an Forschungsanstrengungen betrachten würden. –

Antwort

2

Es ist wichtig zu verstehen, dass im Wesentlichen alle C-Programme aus mehreren Quelldateien erstellt werden. Unter bestimmten Umständen werden viele dieser Quellen in eine oder mehrere Bibliotheken vorkompiliert, aber es ist ziemlich üblich, dass beim Erstellen eines C-Programms auch mehrere C-Quelldateien erstellt und miteinander und mit geeigneten Bibliotheken verknüpft werden, um das Endergebnis zu erzeugen .

Es ist auch wichtig zu verstehen, dass, obwohl C mehr kompatible Erklärungen von Funktionen und Datei-scope Variablen erlaubt, es erlaubt nur ein Definition jede verschiedenen Funktion oder Variable überall in einem gesamten Programm. Dies ist der Hauptgrund für die Konvention, Deklarationen in Header-Dateien zu platzieren (normalerweise mit einer Erweiterung von .h benannt). Eine beliebige Anzahl von Quelldateien, die zu einem bestimmten Programm beitragen, kann #include die gleiche Header-Datei, aber höchstens eine von ihnen #include die Quelldatei, die die entsprechenden Definitionen enthält, und dann nur, wenn diese Datei nicht direkt im Build enthalten waren.

Es kann möglich sein, Ihre Haupt-Quelldatei zu schreiben, so dass es #include s die .c Dateien direkt alle benötigten Definitionen enthält, in diesem Fall ist es nicht notwendig ist, die Header enthalten, aber Sie können nicht zwei separate Quelldateien zu tun die zum gleichen Programm beitragen, wenn das doppelte Funktionsdefinitionen erzeugt. Letztendlich kann dieser Ansatz auch fehlschlagen, da es Grenzen geben kann, wie groß und komplex eine Quelldatei, die ein bestimmter Compiler verwalten kann, sein kann.

Wenn die C-Quelldateien des Chipherstellers mit Headerdateien versehen sind, sollten Ihre eigenen Quelldateien nur diese Header enthalten.Sie sollten in der Lage sein, Objektdateien aus solchen Quellen zu erstellen. Um ausführbare Programme zu erstellen, müssen Sie jedoch auch die C-Quellen des Chipherstellers erstellen und diese mit Ihren eigenen verknüpfen. Es wäre sinnvoll, eine Bibliothek zu erstellen, die die Quellen des Chipherstellers enthält und diese zu verlinken, aber es würde auch funktionieren, die benötigten Quelldateien direkt für jedes Programm zu erstellen. Ihre IDE sollte Unterstützung für beide Optionen haben.