2017-03-29 2 views
1

Ich habe eine zwei Fragen zu GCC-ErweiterungenVerwenden von GCC-Erweiterungen mit Code mit Clang kompiliert?

  1. Wenn ich eine Bibliothek mit GCC-Attributen/Erweiterungen zu kompilieren, werden sie auch arbeiten, wenn ich sie zu einem Programm zusammengestellt mit zum Beispiel clang verknüpfen?

  2. Sollen Funktionsattribute/Erweiterungen in der Funktionsdeklaration oder im Prototyp deklariert werden?

Antwort

2
  1. Wenn die Attribute/Erweiterungen nur die Codegenerierung und nicht die Schnittstellen beeinflussen, sollte es funktionieren.

  2. 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.

+2

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. –

0

Es hängt von der Erweiterung ab.

Siehe https://clang.llvm.org/docs/LanguageExtensions.html

Dieses Dokument enthält die Spracherweiterungen zur Verfügung gestellt von Clang beschreibt. In zusätzlich zu den hier aufgeführten Spracherweiterungen, Clang zielt darauf ab, eine breite Palette von GCC-Erweiterungen zu unterstützen. Weitere Informationen zu diesen Erweiterungen finden Sie im GCC-Handbuch unter .

+0

Ich frage mich, ob ich eine Bibliothek mit gcc mit Attributen kompilieren kann, und dann mit anderen Compilern arbeiten, da es bereits kompiliert ist. Ich war nicht speziell interessiert an clang –

Verwandte Themen