Frage

C: Warum ist so, dass nur Inline-Funktionen mit interner Verknüpfung (dh mit statisch deklarierten) verweisen kann (dh Adresse kopieren, lesen, schreiben, oder Anruf) eine Variable oder Funktion im Dateigültigkeitsbereich mit statischer Speicherdauer, während andere Inline Funktionen nicht?

War es hilfreich?

Lösung

Dies ist, wie die Dinge definiert.

Die inlined Funktion würde in dem Modul eingesetzt werden, wo es genannt wird. So kann es nicht die privaten Sachen in seinem Modul zugreifen, wo sie definiert ist.

Wenn die inlined Funktion nur in diesem Modul (interne Bindung) verwendet. Dann ist es sicher, ihm einen Zugriff auf die „privaten“ Sachen dieses Moduls zu gewähren.

Andere Tipps

Ein Objekt oder eine Funktion mit Dateigültigkeitsbereich, mit dem Speicher Spezifizierer „statisch“ erklärt hat interne Bindung. Während seiner gesamten Lebensdauer die gesamte Ausführung des Programms ist, wird ein Objekt mit interner Bindung nicht deklariert (d sichtbar) andere Übersetzungseinheiten.

Für eine Inline-Funktion mit externer Bindung, der Compiler kann:

  • rufen Sie die Instanz in der Übersetzungseinheit, in der die Funktion deklariert ist
  • eine Inline-Substitution an der Stelle des Aufrufs
  • ausführen
  • ein identisches schaffen, sondern trennen Instanz der Funktion innerhalb der Aufruf Übersetzungseinheit

In den letzten beiden Fällen Objekte mit interner Bindung würden nicht sichtbar sein. Deshalb ist eine Inline-Funktion mit externer Bindung kann nicht eine Kennung mit interner Bindung verweisen.

Darüber hinaus ist es „nicht eine Definition eines veränderbaren Objekts mit statischer Speicherdauer enthalten“, wie dies in mehreren Instanzen des Objekts führt, die wahrscheinlich nicht das gewünschte Verhalten ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top