Wenn die Attribute/Erweiterungen nur die Codegenerierung und nicht die Schnittstellen beeinflussen, sollte es funktionieren.
Hängt vom Attribut ab. Beispielsweise sind Attribute wie pure
, const
oder nonnull
nicht gut, es sei denn, jede Übersetzungseinheit, die die Funktionen verwendet, kann sie sehen - Sie sollten sie auf die Prototypen in Ihrer Kopfzeile setzen (und das unterstrichene Formular verwenden, z. B. __attribute__((__pure__))
). Auf der anderen Seite sollten Attribute, die sich auf die Codegenerierung oder -sichtbarkeit auswirken, in der Implementierung sein, oder wenn Ihr Bibliotheksbenutzer sich dazu entscheidet, eine von Ihrer Bibliothek bereitgestellte Funktion außer Kraft zu setzen überschreiben.
In jedem Fall, wenn Sie ein Attribut auf die Erklärung setzen, wirkt sich die zu Definition (die Definition der Annahme sieht die deklarations dank Jonathan Leffler für die Klärung), aber Definitionen auf zusätzliche Attribute nicht vorhanden nehmen in den Erklärungen.
Sie sagten: "Wenn Sie ein Attribut auf die Deklaration setzen, betrifft es auch die Definition" - womit ich einverstanden bin, solange die Definition die Deklaration sieht, was nicht immer der Fall ist (Menschen sind dafür bekannt, schlampig zu codieren). Das heißt, sie haben größere Probleme, wenn sie Probleme mit "Deklaration, die man nicht sieht" bekommen. –