Nazwij dekorację
Dekoracja nazw zwykle odnosi się do konwencji nazewnictwa języka C++, ale może również mieć zastosowanie do wielu przypadków języka C. Domyślnie język C++ używa nazwy funkcji, parametrów i zwracanego typu w celu utworzenia nazwy konsolidatora dla funkcji. Rozważ następującą deklarację funkcji:
void CALLTYPE test(void);
W poniższej tabeli przedstawiono nazwę konsolidatora dla różnych konwencji wywoływania.
Konwencja wywoływania | extern "C" lub .c plik |
.cpp lub .cxx /TP |
---|---|---|
Konwencja nazewnictwa języka C (__cdecl ) |
_test |
?test@@ZAXXZ |
Konwencja nazewnictwa szybkich wywołań (__fastcall ) |
@test@0 |
?test@@YIXXZ |
Standardowa konwencja nazewnictwa wywołań (__stdcall ) |
_test@0 |
?test@@YGXXZ |
Konwencja nazewnictwa wywołań wektorowych (__vectorcall ) |
test@@0 |
?test@@YQXXZ |
Użyj extern "C"
polecenia , aby wywołać funkcję języka C z języka C++. extern "C"
wymusza użycie konwencji nazewnictwa języka C dla funkcji nieklasowych języka C++. Należy pamiętać o przełącznikach kompilatora /Tc lub /Tp, które informują kompilator o zignorowaniu rozszerzenia nazwy pliku i skompilowaniu pliku odpowiednio jako C lub C++. Te opcje mogą powodować, że nazwy konsolidatora nie są oczekiwane.
Posiadanie prototypów funkcji, które mają niezgodne parametry, może również spowodować ten błąd. Dekoracja nazw zawiera parametry funkcji w końcowej dekorowanej nazwie funkcji. Wywołanie funkcji z typami parametrów, które nie są zgodne z tymi w deklaracji funkcji, może również spowodować LNK2001.
Obecnie nie ma standardów nazewnictwa języka C++ między dostawcami kompilatora, a nawet między różnymi wersjami kompilatora. Łączenie plików obiektów skompilowanych przez inne kompilatory może nie generować tego samego schematu nazewnictwa i może powodować nierozwiązane zewnętrzne elementy.
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla