Partager via


Caractéristiques de liaison

Le terme « linkage specification » fait référence au protocole pour lier des fonctions (ou des procédures) écrites dans différents langages.les conventions d'appel suivantes sont affectées :

  • respect de la casse des noms.

  • Décoration de noms.En C, le compilateur préfixe des noms par un trait de soulignement.Cela est souvent appelée « décoration. » En C++, la décoration de nom est utilisée pour conserver les informations de type via la phase de liaison.(Consultez noms décorés)

  • Ordre dans lequel les arguments sont supposés sur la pile.

  • Responsabilité d'ajustement de la pile au retour de fonction.La fonction appelée ou l'appel de la fonction est chargé.

  • passer des arguments masqués (si des arguments masqués sont passés).

extern string-literal { declaration-list }
extern string-literal declaration

Les spécifications de la liaison facilite déplacer progressivement le code C à C++ en vous permettant d'utiliser du code existant.

Spécifique à Microsoft

Les seules caractéristiques de liaison actuellement pris en charge par Microsoft C++ sont « C » et « C++ ».

détail de FIN Microsoft

L'exemple suivant déclare les fonctions atoi et atol avec liaison C :

extern "C"
{
    int  atoi( char *string );
    long atol( char *string );
}

Les appels à ces fonctions sont effectués à l'aide d'une liaison C.Le même résultat peut être obtenu avec ces deux déclarations :

extern "C" int  atoi( char *string );
extern "C" long atol( char *string );

Spécifique à Microsoft

Tous les fichiers Include standard Microsoft C utilisent des directives de compilation conditionnelle pour détecter la compilation C++.Lorsque la compilation C++ est détectée, les prototypes sont placés dans une directive d' extern « C » comme suit :

// Sample.h
#if defined(__cplusplus)
extern "C"
{
#endif

// Function declarations

#if defined(__cplusplus)
}
#endif 

détail de FIN Microsoft

Vous n'avez pas besoin de déclarer des fonctions dans les fichiers Include standard en tant que extern « C ».

Si une fonction est surchargée, pas beaucoup des fonctions du même nom peut avoir un spécificateur de liaison.(Pour plus d'informations, consultez surcharge de fonction.)

Le tableau suivant indique les différentes caractéristiques de liaison s'exécutent.

effets des caractéristiques de liaison

spécification

Effet

sur un objet

Affecte la liaison de cet objet uniquement

sur une fonction

affecte la liaison de cette fonction et de toutes les fonctions ou les objets déclarés dans elle

sur une classe

Affecte la liaison de tous les fonctions et objets non - membres déclarés dans la classe

Si une fonction a plusieurs spécifications de la liaison, ils doivent être en accord ; c'est une erreur de déclarer des fonctions comme ayant une liaison C et C++.En outre, si deux déclarations pour une fonction se produisent dans un programme - une avec une spécification de liaison et un sans - la déclaration avec la spécification de la liaison doivent être première.Toutes les déclarations redondantes des fonctions qui ont déjà les spécifications de la liaison sont fournies la liaison spécifiée dans la première déclaration.Par exemple :

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.

Fonctions et objets explicitement déclarés comme statique dans le corps d'un spécificateur composé de liaison () sont traités comme des fonctions statiques ou objets ; le spécificateur de liaison est ignoré.D'autres fonctions et objets se comportent comme si déclaré avec le mot clé d' extern .(Voir l' En utilisant extern pour spécifier une liaison pour plus d'informations sur le mot clé d' extern .)

Voir aussi

Référence

En utilisant extern pour spécifier la liaison