Frage

Wie tragbar ist eine schwache Verknüpfung?

#pragma weak my_symbol

Ich sehe diese Frage: How-to-to-Make-Weak-Verknüpfung-Arbeit mit GCC Besprecht, wie man es zum Laufen bringt. Aber gibt es eine gute Möglichkeit, dies so zu tun, dass GCC nicht erforderlich ist?

Was ist der Unterschied zwischen schwachem Verknüpfen und Schutz der Deklaration mit einem #ifdef?

#ifndef my_weak_fn
    void my_weak_fn(){/* Do nothing */ return;}
#endif
War es hilfreich?

Lösung

#pragma ist per Definition, nicht tragbar.

Und eine schwache Verknüpfung erfolgt zur Verbindungszeit (überraschenderweise). Es ermöglicht eine Funktion (oder ein beliebiges Symbol) mit derselben Signatur, eine andere zu überschreiben. Das bedeutet, dass ein starker Vorzug für den Schwachen ausgewählt wird, aber wenn es keine Starke gibt, wird der Schwache verwendet.

Wachen einbeziehen, werden vom Compiler und nicht vom Linker durchgeführt, und sie tun dies nicht Lassen Sie den Fallback einem schwachen, wenn der Starke nicht da ist. Sie können das gleiche Verhalten simulieren, wenn Sie die Quelle für beide Funktionen steuern (von ifdef-ing für einen, ifndef-ing für den anderen), aber das ist nicht immer der Fall und das ist mehr zwischen zwei starken Funktionen.

Mit schwachen Verknüpfung können Sie Dinge wie Tropfen in Ihrem eigenen tun malloc()/free() Für Debugging -Zwecke, während Sie sich noch mit der Bibliothek verknüpfen, die sie zur Verfügung stellt.

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