Wo stelle ich all diese funktionsähnlichen #defines in C?

8

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.

    
Tristan 11.03.2010, 21:00
quelle

4 Antworten

13

Ich sehe nichts falsch mit der .h-Datei.

    
Matt Stephenson 11.03.2010 21:06
quelle
7

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:

  • Funktionsprototypen
  • Konstante Deklarationen
  • Globale Variable extern Deklarationen
  • Inline-Funktionsdefinitionen
  • Typdefinitionen
  • und Makrodefinitionen, z. B. was Sie fragen.

Umgekehrt gehen die folgenden Dinge normalerweise in .c files:

  • Globale Variablendefinitionen
  • Funktionsdefinitionen, die in Objektcode kompiliert und verknüpft werden

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.

    
Brooks Moses 12.03.2010 00:18
quelle
2

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.

    
DarthNoodles 13.04.2010 14:02
quelle
2

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.

    
colgur 12.03.2010 17:34
quelle