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).

Vedere anche

Riferimenti

Utilizzando esterno per specificare collegamento