Bağlantı özellikleri
"Bağlantı specification" terimi için farklı dillerde yazılmış işlevleri (veya yordamları) bağlama iletişim kuralı anlamına gelir.Aşağıdaki arama kuralları etkilenir:
Adları büyük/küçük harf duyarlılığı.
Adları decoration.c, derleyici adları bir alt çizgi ekler.Bu genellikle "decoration." olarak adlandırılır C++'da, ad düzenleme aracılığıyla bağlantı aşama türü bilgileri saklamak için kullanılır.(Bkz: donatılmış adları)
Sıra bağımsız bir yığında bekleniyordu.
Yığında işlev ayarlama sorumluluk dönün.Çağrılan işlev veya işlevini çağırırken sorumludur.
(Mi gizli herhangi bir bağımsız değişkeni iletilir) gizli bağımsız değişkenleri gönderiliyor.
extern string-literal { declaration-list }
extern string-literal declaration
Varolan kodu kullanımını sağlayarak c koduna C++ giderek porting bağlantı belirtimi kolaylaştırır.
Microsoft özel
Şu anda Microsoft C++ tarafından desteklenen tek bağlantı özellikleri olan "c" ve "C++".
SON Microsoft özel
Aşağıdaki örnek işlevlerini bildirir atoi ve atol c bağlantı ile:
extern "C"
{
int atoi( char *string );
long atol( char *string );
}
Bu işlev çağrıları, c bağlantı kullanılarak yapılır.Bu iki bildirimleri ile aynı sonucu elde edilebilir:
extern "C" int atoi( char *string );
extern "C" long atol( char *string );
Microsoft özel
Tüm Microsoft c Standart C++ derlemesi algılamak için dosyaları kullan koşullu derleme yönergeleri içerir.Prototipler içine C++ derlemesi algılandığında, bir extern "c" yönergesini aşağıdaki gibi:
// Sample.h
#if defined(__cplusplus)
extern "C"
{
#endif
// Function declarations
#if defined(__cplusplus)
}
#endif
SON Microsoft özel
Standart içerik dosyaları işlevlerinde bildirmeniz gerekmez extern "c".
Bir işlev aşırı yüklüyse, işlevleri aynı adı geçmeyen biri bağlantı belirleyici olabilir.(Daha fazla bilgi için bkz: İşlevlerin aşırı.)
Aşağıdaki tabloda, çeşitli bağlantı belirtimleri çalışma gösterir.
Bağlantı özellikleri etkilerini
Belirtimi |
Etki |
---|---|
Bir nesne üzerinde |
Sadece o nesnenin bağlantı'yı etkiler |
Bir işlevi |
Bu işlev ve tüm işlevleri veya nesneleri etkiler bağlantı içinde bildirilen |
Bir sınıf üzerinde |
Bağlantı'yı tüm dahil olmayan işlevler ve sınıf içinde bildirilen nesneleri etkiler |
Kabul etmelisiniz birden fazla bağlantı belirtimi, bir işlevi vardır c ve C++ bağlantı olarak işlevlerini bildirmek için bir hatadır.Üstelik iki bildirimleri bir işlev için bir program ortaya varsa — bağlantı belirtimi ve olmayan biriyle — bağlantı belirtimi bildirimiyle ilk.Bağlantı belirtimi olan işlevlerin herhangi bir yedek bildirimleri ilk bildiriminde belirtilen bağlantı verilir.Örne?in:
extern "C" int CFunc1();
...
int CFunc1(); // Redeclaration is benign; C linkage is
// retained.
int CFunc2();
...
extern "C" int CFunc2(); // Error: not the first declaration of
// CFunc2; cannot contain linkage
// specifier.
İşlevler ve nesneleri açıkça bildirilen olarak statik bileşik bağlantı belirleyici gövdesi içinde ({}) statik işlevleri veya nesneleri; olarak kabul edilir bağlantı belirteci gözardı edilir.Diğer işlevler ve nesneleri kullanılarak bildirilen gibi davranmasını extern anahtar sözcüğü.(Bkz: kullanarak dış bağlantı belirtmek için hakkında ayrıntılı bilgi için extern anahtar sözcüğünü.)