Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ad düzenlemesi genellikle C++ adlandırma kurallarını ifade eder, ancak bir dizi C örneğine de uygulanabilir. Varsayılan olarak C++ işlevin adını, parametrelerini ve dönüş türünü kullanarak işlev için bir bağlayıcı adı oluşturur. Aşağıdaki işlev bildirimini göz önünde bulundurun:
void CALLTYPE test(void);
Aşağıdaki tabloda, çeşitli çağrı düzenleri için bağlayıcı adları gösterilmektedir.
| Çağırma kuralı |
extern "C" veya .c dosyası |
.cppveya .cxx/TP |
|---|---|---|
C adlandırma kuralı (__cdecl) |
_test |
?test@@ZAXXZ |
Hızlı çağrı adlandırma kuralı (__fastcall) |
@test@0 |
?test@@YIXXZ |
Standart çağrı adlandırma kuralı (__stdcall) |
_test@0 |
?test@@YGXXZ |
Vektör çağrısı adlandırma kuralı (__vectorcall) |
test@@0 |
?test@@YQXXZ |
"None adlandırma kuralını koru (__preserve_none)" |
test@@_A |
NA |
C++'tan bir C işlevini çağırmak için kullanın extern "C" .
extern "C" sınıf dışı C++ işlevleri için C adlandırma kuralının kullanılmasını zorlar. Derleyiciye sırasıyla dosya adı uzantısını yoksayıp C veya C++ olarak derlemesini sağlayan derleyici anahtarları /Tc veya /Tp'ye dikkat edin. Bu seçenekler, beklemediğiniz bağlayıcı adlara neden olabilir.
Eşleşmeyen parametreleri olan işlev prototiplerinin olması da bu hataya neden olabilir. Ad dekorasyonu, bir işlevin parametrelerini son dekore edilmiş işlev adıyla birleştirir. İşlev bildirimindekilerle eşleşmeyen parametre türlerine sahip bir işlevi çağırmak da LNK2001 neden olabilir.
Şu anda derleyici satıcıları arasında ve hatta bir derleyicinin farklı sürümleri arasında C++ adlandırma standartları yoktur. Diğer derleyiciler tarafından derlenen nesne dosyalarını bağlamak aynı adlandırma düzenini oluşturmayabilir ve çözümlenmemiş dış dosyalara neden olabilir.