[so] [Tech Q] scope & linkage

Alexandru Damian alexdamian1989 at gmail.com
Mon Feb 21 22:43:09 EET 2011


Daca oi spune prostii sa nu loviti prea tare :).


2011/2/21 Razvan Deaconescu <razvan.deaconescu at cs.pub.ro>

> On 02/21/2011 09:02 PM, Catalin Nicutar wrote:
> > Okay, daca urmeaza intrebari mai interesante dupa :-).
> > tl;dr : Imi cer scuze ca e asa lung post-ul si in mod cert imi cer scuze
> > pentru
> > erorile inerente.
>
> Erorile nu prea l-am găsit dar clientul tău de mail are o interfață
> oribilă.
>
> > Obiectele externe, spre deosebire de cele interne, au linkage. Exista
> > "internal
> > linkage" si "external linkage". Un identificator are in mod implicit
> > external
> > linkage - adaugandu-i cuvantul cheie "static" ii dam internal linkage
> (este
> > cu
> > adevarat nefericita coliziunea de nume, "static" inseamna altceva pentru
> > identificatorii dintr-un bloc) .
>
> Exact. Linkage are legătură cu procesul de linking (duh!). Linker-ul, în
> momentul în care rezolvă simbolurile ține cont "linkage-ul" acestora.
>
> > E mereu importanta distinctia dintre a declara si a defini (eu nu ma simt
> in
> > stare sa atac subiectul insa K&R il refera in fiecare capitol impreuna cu
> > "storage classes").
>
> Discuția asta o lăsăm pe altă dată :-)
>
> --
> Ca să continuăm în acest sens, cu ce diferă declarația:
>
> int f(int a, int b);
>
> de
>
> extern int f(int a, int b);


Declaratiile nu difera cu nimic, conform ansi c (si wikipedia :) ). Cuvantul
cheie extern anunta existenta definitiei in alt loc (e.g. fisier). Oricum,
se pare ca toate prototipurile sunt externe in ansi c (e.g. prototipurile
din headere...)

> --
> Altul: Fie următoarele
>
> extern int b; /* global variable */
> static int c;
>
> b referă un external object, are "external linkage", "file scope".
> c referă un external object, are "internal linkage", "file scope".
>
> În cazul
>
> int f(int a, int b)
> {
>    int prod;
>    static int sum;
>
>    ...
> }
>
> Ce se poate spune despre prod și sum? Cu ce diferă cele două din
> perspectiva unor terminologii legate de limbajul C? (precum identifier
> scope, identifier linkage)
> --
> Unde sunt stocate variabilele precedate de static în cadrul unei
> funcții? (variabila sum din exemplul de mai sus)
>

Ambele au "block scope" sau "function scope" (despre care vorbea si
Catalin), doar ca prod se aloca pe stiva, iar sum pe heap, tocmai pentru a
evita pop-ul facut stivei la iesirea din functie si pentru a pastra valorile
intre apeluri.

> --
>
> Răzvan
> _______________________________________________
> http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii
>



-- 
Alexandru Damian

Polytechnic University of Bucharest
   Faculty of Automatic Control and Computers
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20110221/ba609138/attachment.htm>


More information about the so mailing list