Was ist der Unterschied zwischen den folgenden beiden Deklarationen? Ich dachte, sie wären äquivalent, aber das erste Beispiel funktioniert, und das zweite nicht. Es kompiliert und läuft, aber der Code zur Anzeige des Bitmaps zeigt leer. Ich habe es noch nicht durchgesehen, aber fehlt mir etwas Offensichtliches? GUI_BITMAP ist eine einfache Struktur, die ein Bitmap beschreibt. Dies ist für VC++ 2005, aber ich glaube, es funktioniert auch nicht in VC++ 2008. Dieser Fall lässt mich wirklich nachdenklich werden...
Beispiel 1:
extern "C" const GUI_BITMAP bmkeyA_cap_active;
extern "C" const GUI_BITMAP bmkeyA_cap_inactive;
Beispiel 2:
extern "C"
{
const GUI_BITMAP bmkeyA_cap_active;
const GUI_BITMAP bmkeyA_cap_inactive;
};
Bearbeiten: Weitere Untersuchungen haben gezeigt, dass das zweite Beispiel die Strukturen erstellt, während das erste auf externe Strukturen verweist. Das zweite Beispiel sollte eigentlich fehlschlagen, da es zwei Variablen im globalen Bereich mit demselben Namen gibt. Aber das tut es nicht, es sendet eine mit Nullen gefüllte Struktur an den Anzeigecode, der dann aufgibt. Hmmm.....
Bearbeiten 2: Wenn ich denselben Code durch einen anderen Compiler laufen lasse (IAR), scheitert das Kompilieren des Beispiels 2 tatsächlich mit einem Fehler bezüglich eines fehlenden Standardkonstruktors. Also vermute ich, dass es etwas Subtiles am "extern" Schlüsselwort, an den Strukturen und an C++ gibt, das ich nicht verstehe. Wenn die Dinge im externen Bereich Funktionen wären, wären die beiden Beispiele identisch, stimmt's?