Specifiche di collegamento
Il termine “specifiche di collegamento„ si riferisce al protocollo per collegare le funzioni o le procedure) scritte in linguaggi diversi.le seguenti convenzioni di chiamata sono interessate:
Distinzione tra maiuscole e minuscole dei nomi.
Decorazione dei nomi.In C#, il compilatore prefisso per i nomi con una sottolineatura.Ciò viene spesso chiamata “decorazione„. In C++, la decorazione dei nomi viene utilizzata per conservare le informazioni sul tipo con la fase di collegamento.(Vedere nomi decorati)
L'ordine in cui gli argomenti sono previsti nello stack.
Responsabilità di regolare lo stack a restituito dalla funzione.La funzione chiamata o alla funzione chiamante è responsabile.
Passaggio di argomenti nascosti (se gli argomenti nascosti vengono passati a).
extern string-literal { declaration-list }
extern string-literal declaration
Le specifiche di collegamento facilita gradualmente trasferire il codice c# a C++ consentendo l'utilizzo del codice esistente.
Specifici di Microsoft
Le uniche specifiche dei collegamenti attualmente supportate da Microsoft C++ sono “C„ e “C++„.
Microsoft FINALE specifico
Nell'esempio vengono dichiarate le funzioni atoi e atol con il collegamento c:
extern "C"
{
int atoi( char *string );
long atol( char *string );
}
Le chiamate a queste funzioni vengono apportate tramite il collegamento c.Lo stesso risultato può essere raggiunto con queste due dichiarazioni:
extern "C" int atoi( char *string );
extern "C" long atol( char *string );
Specifici di Microsoft
Tutti i file di inclusione standard Microsoft C# utilizzano direttive di compilazione condizionale per rilevare la compilazione di C++.Quando la compilazione C++ viene rilevata, prototipi sono racchiusi in extern “C„ direttiva come segue:
// Sample.h
#if defined(__cplusplus)
extern "C"
{
#endif
// Function declarations
#if defined(__cplusplus)
}
#endif
Microsoft FINALE specifico
Non è necessario dichiarare le funzioni nei file di inclusione standard come extern “C„.
Se una funzione è sottoposta a overload, non più di una delle funzioni con lo stesso nome può avere un identificatore di collegamento.(Per ulteriori informazioni, vedere overload di funzione).
Nella tabella seguente vengono indicati come le diverse operazioni di specifiche di collegamento.
Effetti delle specifiche di collegamento
specifica |
Effetto |
---|---|
su un oggetto |
Influisce sul collegamento dell'oggetto solo |
In una funzione |
Influisce sul collegamento della funzione e tutte le funzioni o oggetti dichiarati in |
In una classe |
Influisce sul collegamento di tutte le funzioni e oggetti membro non dichiarati all'interno della classe |
Se una funzione dispone di più specifiche di collegamento, devono concordare; è un errore per dichiarare le funzioni come dotata di sia collegamento in c e C++.Inoltre, se due dichiarazioni per una funzione si verificano in un programma - una con una specifica di collegamento e uno senza - la dichiarazione con le specifiche di collegamento devono essere prima.Tutte le dichiarazioni ridondanti delle funzioni che già dispongono di specifiche di collegamento vengono fornite il collegamento specificato nella prima dichiarazione.Di seguito è riportato un esempio:
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.
Funzioni e oggetti in modo esplicito dichiarati come statico nel corpo di un identificatore di collegamento composita ( vengono trattati come le funzioni statiche o oggetti; l'identificatore di collegamento viene ignorato.Altre funzioni e oggetti si comportano come se dichiarato utilizzando il extern parola chiave.(Vedere Utilizzando esterno per specificare collegamento per informazioni dettagliate su extern parola chiave).