Was ist der Unterschied zwischen einer statischen Elementfunktion und einer externen "C" -Verbindungsfunktion? Zum Beispiel muss ich bei der Verwendung von "makecontext" in C++ einen Zeiger an die Funktion übergeben. Google empfiehlt, externe C-Verknüpfungen zu verwenden, da "makecontext" C ist. Aber ich habe herausgefunden, dass auch statische Arbeiten verwendet werden. Bin ich glücklich oder ... geradestatisch vs extern "C"/"C++"
class X {
public:
static void proxy(int i) {}
}
makecontext(..., (void (*)(void)) X::proxy, ...);
vs
extern "C" void proxy(int i) {}
makecontext(..., (void (*)(void)) proxy, ...);
EDIT: Können Sie einen Compiler oder Architektur zeigen, wo die statische Elementversion nicht funktioniert (und es ist kein Bug im Compiler) ?
'Es tut mir leid, aber ich bin immer noch nicht überzeugt '... von was? die Tatsache, dass der Standard autoritativer ist als das zufällige implementierungsdefinierte Verhalten einiger Compiler? –
Dies ist ein alter Beitrag (vor 8 Jahren heute) Mein Punkt war zu der Zeit so etwas wie IMHO, wenn sich jede existierende Implementierung vom Standard unterscheidet dann solltest du vielleicht eine Frage stellen ob es der Standard ist der falsch ist. Ich suchte nach Beispielen für Plattformen, auf denen es nicht funktioniert. –
Fair genug.Es ist natürlich nicht unüblich, dass die C- oder C++ - Standards unbeabsichtigte Konsequenzen enthalten, die von allen existierenden Compilern ignoriert werden. Das ist momentan mein Favorit: http://StackOverflow.com/a/42335543/2757035 Aber in diesem Fall denke ich, dass der Standard ziemlich klar sagt, was es bedeutet, und Implementierungen könnten ihr Verhalten jederzeit ändern, wenn es solche gibt ein Vorteil. –