Was ist der Unterschied zwischen den folgenden zwei Deklarationen? Ich dachte, sie wären gleichwertig, aber die erste Probe funktioniert, und die zweite nicht. Ich meine, es kompiliert und läuft, aber der Bitmap-Display-Code zeigt leer. Ich bin noch nicht durchgetreten, aber vermisse ich etwas Offensichtliches? GUI_BITMAP ist eine einfache Struktur, die eine Bitmap beschreibt. Dies ist für VC++ 2005, aber ich denke, es schlägt auch in VC++ 2008 fehl. Verkratzen meinen Kopf auf dieses ...Problem mit extern keyword in C++
Probe 1:
extern "C" const GUI_BITMAP bmkeyA_cap_active;
extern "C" const GUI_BITMAP bmkeyA_cap_inactive;
Probe 2:
extern "C"
{
const GUI_BITMAP bmkeyA_cap_active;
const GUI_BITMAP bmkeyA_cap_inactive;
};
Edit: Weitere Erkundungen hat gezeigt, dass das zweite Beispiel die Strukturen schafft, während die erste sich auf externe Strukturen bezieht. Das zweite Beispiel sollte nicht gelinkt werden, da es zwei globale Variablen mit demselben Namen gibt. Aber es tut es nicht, es sendet eine zero gefüllte Struktur an den Display-Code, der aufgibt. Hmmm .....
Bearbeiten 2: Ausführen des gleichen Codes durch einen anderen Compiler (IAR) tatsächlich fehlgeschlagen, um auf Sample 2 zu kompilieren, mit einem Fehler über das Fehlen eines Standardkonstruktors. Ich vermute also, dass etwas Subtiles über das Schlüsselwort "extern", Strukturen und C++, das ich nicht bekomme, etwas ist. Wenn die Dinge im externen Bereich Funktionen wären, wären die beiden Samples identisch, oder?
Danke für die Antwort, aber hier sind keine Bibliotheksobjekte im Einsatz, das ist alles nur mein Code, eine Mischung aus C und C++. Meine ursprüngliche Frage bleibt - was ist der Unterschied zwischen Beispiel 1 und Beispiel 2 - Ich dachte, sie sollten genau den gleichen Code generieren? Wenn die Dinge Funktionen statt Strukturen wären - sie sind das Gleiche, oder? – Jeff
@Jeff, die schnelle Antwort auf Ihre Frage ist, dass nein, diese beiden sind nicht das Gleiche, weshalb Sie Probleme sehen.Im zweiten Fall ändern Sie nur die Anweisungen in '{}', um die Verknüpfungskonventionen von C zu verwenden. Im ersten Beispiel tun Sie das * plus *, was darauf hinweist, dass die Variablen an anderer Stelle deklariert sind. http://msdn.microsoft.com/en-us/library/0603949d(VS.80).aspx –