Länkning (mjukvara)

I programmeringsspråk, särskilt de kompilerade som C , C++ och D , beskriver länkning hur namn kan eller inte kan referera till samma enhet genom hela programmet eller en enda översättningsenhet .

Det statiska nyckelordet används i C för att begränsa synligheten för en funktion eller variabel till dess översättningsenhet. Detta gäller även i C++. (C++ 98/03 utfasade denna användning till förmån för anonyma namnutrymmen , men är inte längre utfasad i C++ 11.) Dessutom behandlar C++ implicit varje const namnområde-omfattningsvariabel som att ha intern länkning om den inte uttryckligen deklareras extern , till skillnad från C.

Ett namns koppling är relaterad till, men skild från, dess omfattning . Omfattningen av ett namn är den del av en översättningsenhet där det är synligt. Till exempel är ett namn med globalt omfattning (vilket är samma som fil-omfattning i C och samma som det globala namnområde-omfattning i C++) synligt i vilken del av filen som helst. Dess omfattning kommer att sluta i slutet av översättningsenheten, oavsett om det namnet har fått extern eller intern koppling eller inte.

Om namnet har extern koppling kan den enhet som namnet anger hänvisas till från en annan översättningsenhet med en distinkt deklaration för samma namn, och från andra omfattningar inom samma översättningsenhet med hjälp av distinkta deklarationer. Om namnet gavs intern koppling skulle en sådan deklaration beteckna en distinkt enhet, även om den använder samma namn, men dess enhet skulle kunna refereras till genom distinkta deklarationer inom samma översättningsenhet. Ett namn som inte har någon koppling alls kan inte refereras från deklarationer i olika omfattning, inte ens från samma översättningsenhet. Exempel på sådana namn är parametrar för funktioner och lokala variabler. Detaljerna skiljer sig mellan C (där endast objekt och funktioner - men inte typer - har länkning) och C++ och mellan denna förenklade översikt.

Koppling mellan språk måste göras med viss försiktighet, eftersom olika språk pryder sina yttre symboler olika. Ett vanligt idiom använder extern "C" för att länka C++ och C-kod.

Koppling i C

Definition av 'länkage' citerad från ISO/IEC 9899:TC3 (C99 Standard). C använder termen "identifierare" där den här artikeln använder "namn" (det senare är vad C++ använder för att formalisera länkning):

En identifierare som deklareras i olika scopes eller i samma scope mer än en gång kan fås att referera till samma objekt eller funktion genom en process som kallas länkning.

Följande är ett vanligt exempel på länkning:


  
   
  
 

  
   0  
 /* fil demo1.c */  /* extern */  void  foo  (  void  );  /* extern valfritt - det är standard */  int  main  (  void  )  {  foo  ();  återvända  ;  } 
  

  
 

  
 /* fil demo2.c */  void  foo  (  void  )  {  ...  } 

Funktion foo deklareras i två filer, med dess funktionskropp definierad i demo2.c . Via länkning foo in main() inuti demo1.c till foo i demo2.c . Detta är ett exempel på extern länkning för en funktion.

Se även

  1. ^   ISO/IEC 9899 . Officiella C99-dokument, inklusive tekniska rättelser och en motivering. Från och med 2007 är den senaste versionen av standarden "ISO/IEC 9899:TC3" (PDF) . (3,61 MiB )