Ich arbeite mit einem eingebetteten System, und ich komme mit einer Tonne von HW-Schnittstellen #define
Makros. Ich möchte alle diese in eine separate Datei (für OOP-Ness), aber ich weiß nicht den besten Weg zu #include
, dass. Bringe ich sie alle in eine .c-Datei und schließe sie dann ein? Scheint albern, diese in eine .h-Datei zu legen.
Diese sollten in die .h
Dateien gehen. Die andere Option ist eine .c
-Datei, und dazu müsste #include
verwendet werden, um eine .c
-Datei einzufügen, was sehr verwirrend sein wird - und Ihr Makefile verwirren wird, wenn es die Standardannahme, dass .c
file entspricht direkt einer kompilierten .o
-Datei.
Das normale Muster ist, dass .h
-Dateien für Dinge sind, die an anderen Stellen enthalten sind (und insbesondere an mehreren anderen Orten), und dass .c
-Dateien für Dinge sind, die einmal in Objektdateien kompiliert werden / p>
Die folgenden Dinge werden normalerweise in .h
dateien übernommen:
extern
Deklarationen Umgekehrt gehen die folgenden Dinge normalerweise in .c
files:
Der Fall von "Funktionsdefinitionen geht nur in .c
files" ist einfach der degenerierte Fall, wenn Sie keine Inline-Funktionen haben.
In C ++, wo viele Funktionen in Vorlagenform definiert sind und daher die Definitionen bei ihrer Verwendung enthalten sein müssen, werden diese Definitionen sehr oft in die Datei .h
(oder .hpp
oder was auch immer) geschrieben. So etwas hat definitiv einen Präzedenzfall.
Legen Sie sie dort hin, wo Sie sie brauchen.
Wenn Sie es nur für eine Datei benötigen, fügen Sie es am Anfang dieser Datei ein.
Wenn Sie es für mehrere Dateien benötigen, dann fügen Sie es in eine Header-Datei ein.
Ich empfehle das nicht unbedingt, aber ich habe es in den letzten 10 Jahren in einigen eingebetteten Projekten gesehen: Inline-Funktionen wie .inl.
Brooks bricht die Aufgaben gut ab. Sie könnten Inline- und Makrodefinitionen von normalen Funktionsprototypen und solchen trennen:
%Vor%Ihr Endziel ist Konsistenz: Alle Layout-Entscheidungen sollten denjenigen helfen, die Ihnen erfolgreich sind.
Tags und Links c include embedded c-preprocessor code-organization