windows - Skal jeg angive ekstern 'C' ved eksporterende symboler?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg spørger mig selv, om ekstern 'C' er et must eller ej?

Bedste reference


Kun hvis du vil ringe din kode fra C (eller en anden C ++ compiler, som du bør behandle som C).


Det er at deaktivere navngivning. [6]


Se denne artikel på C ++ FAQ: http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html[7]

Andre referencer 1


Nej, du bruger extern "C" for at give en C-link til dine C ++-funktioner, så de vundet 'ikke være' dekoreret 'som normale C ++-funktioner og tillader dem at blive kaldt fra C (eller Objective-C).


Funktionsindretning bruges til at implementere C ++-funktionen overbelastningsfunktionen og giver hver variation af funktionen en anden signatur, samtidig med at bygherren kan bruge det navn, han har tildelt. [8]


Dine C + + -funktioner vil blive eksporteret automatisk ved simpelthen ikke at bruge static søgeordet. Men hvis du har implementeret dine C ++-funktioner inden for en Windows DLL, er det nødvendigt at bruge declspec dllexport/dllimport søgeordene for at få adgang til dem eksternt.

Andre referencer 2


Brug af extern "C" deaktiverer navngivning. Hvis du ikke gør det, kan du gøre, hvis det er svært for en klient af din DLL at importere dine symboler.


Husk, at forskellige C ++-kompilere har forskellige navne manglende regler, og så dine manglede eksporterede navne kan afvige fra de navne, der bruges ved import.


Men da det er forkert at importere en klasse fra en DLL, hvis du bruger en anden compiler end den, der bruges til DLL'en, er det nok et moot-punkt.


Så hvis du eksporterer klasser (som regel en dårlig ide alligevel) er det lettere at forlade mangling. Ellers sluk det med extern "C".