Static deklarierten Funktionen in "C" - header-Dateien

Für mich ist es eine Regel zu definieren und deklarieren von statischen Funktionen im Quellcode-Dateien, die ich meine .c-Dateien.

Jedoch in sehr seltenen Situationen, ich sah Menschen, die die Deklaration in der header-Datei.
Da statische Funktionen haben, die interne Verlinkung, die wir benötigen, definieren Sie es in jede Datei binden wir die header-Datei, wo die Funktion deklariert ist. Das sieht ziemlich seltsam und weit Weg von dem was wir wollen in der Regel, wenn man erklärt etwas als statisch.

Auf der anderen Seite, wenn jemand naiv versucht, die Funktion zu nutzen, ohne es zu definieren der compiler Beschwerde. Also in einem gewissen Sinn ist nicht wirklich unsicher ist, tun Sie das auch klingen seltsam.

Meine Fragen sind:

  • Was ist das problem der Deklaration von statischen Funktionen in header-Dateien?
  • Was sind die Risiken?
  • Was die Auswirkungen in der Zusammenstellung Zeit?
  • Gibt es Risiken in der Laufzeit?
Ich würde eher Fragen: Was könnte ein akzeptabler Grund, das zu tun? IMO ist es definitiv code smell.
Kleine static inline Funktionen werden gelegentlich auch als accessor-Funktionen in die Struktur-Datentypen, die als (besseren) Ersatz für Präprozessor-Makros. Im Gegensatz zu Makros, statische inline-Funktionen bieten compile-Zeit-Typ-Prüfung und können sich auf Ihre Parametern mehrere Male (das ist problematisch, mit Präprozessor-Makros).
Guter Punkt. Sehen Sie den source-code kann der compiler besser Optimierungen (inlining wird einer von Ihnen) ohne linker Hilfe.
Kann jemand sagen, was die Größe der Auswirkungen definieren, die die gleiche Funktion immer und immer wieder in vielen compilation-Einheiten ist? Ich nehme an, der linker (davon ausgehend, dass verschiedene TUs) können Falten Sie Sie eine so das den Objekt-code multipliziert wird?
Für makro-Ersatz statische inline-Funktionen minimal. Funktionsaufrufe neigen, müssen einige register mischen (die übergabe der Parameter), in der Erwägung, dass viele Compiler können, vermeiden Sie solche, die für die statische inline-Funktionen (und stattdessen die Arbeit an den Registern, die haben die Daten schon). Es variiert sehr stark, natürlich, aber ich würde sagen, dass, wenn inlining der Funktion erheblich, erhöht die code-Größe, das sollte die Funktion nicht inline in den ersten Platz.

InformationsquelleAutor miguel azevedo | 2017-02-05

Schreibe einen Kommentar