Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Naamdecoratie verwijst meestal naar C++-naamconventies, maar kan ook van toepassing zijn op een aantal C-zaken. Standaard gebruikt C++ de functienaam, parameters en retourtype om een linkernaam voor de functie te maken. Houd rekening met de volgende functiedeclaratie:
void CALLTYPE test(void);
In de volgende tabel ziet u de linkernaam voor verschillende aanroepconventies.
| Oproepconventie |
extern "C" of .c bestand |
.cpp, .cxx of /TP |
|---|---|---|
C-naamconventie (__cdecl) |
_test |
?test@@ZAXXZ |
Naamconventie voor snelle aanroepen (__fastcall) |
@test@0 |
?test@@YIXXZ |
Standaardconventie voor naamgeving van aanroepen (__stdcall) |
_test@0 |
?test@@YGXXZ |
Naamconventie voor vectoroproepen (__vectorcall) |
test@@0 |
?test@@YQXXZ |
Behoud de naamgevingsconventie 'Geen' (__preserve_none) |
test@@_A |
NA |
Gebruik extern "C" deze functie om een C-functie aan te roepen vanuit C++.
extern "C" dwingt het gebruik van de C-naamconventie voor niet-klasse C++-functies af. Houd rekening met compilerswitches /Tc of /Tp, die de compiler vertellen de bestandsnaamextensie te negeren en het bestand te compileren als respectievelijk C of C++. Deze opties kunnen leiden tot linkernamen die u niet verwacht.
Als u functieprototypes hebt met niet-overeenkomende parameters, kan deze fout ook optreden. Bij naamdecoratie worden de parameters van een functie opgenomen in de uiteindelijke gedecoreerde functienaam. Het aanroepen van een functie met de parametertypen die niet overeenkomen met die in de functiedeclaratie, kan ook LNK2001 veroorzaken.
Er zijn momenteel geen standaarden voor C++-naamgeving tussen compilerleveranciers of zelfs tussen verschillende versies van een compiler. Het koppelen van objectbestanden die zijn gecompileerd door andere compilers, produceert mogelijk niet hetzelfde naamgevingsschema en kan niet-opgeloste externe gegevens veroorzaken.