[so] [Tech Q] scope & linkage
Razvan Deaconescu
razvan.deaconescu at cs.pub.ro
Mon Feb 21 22:13:26 EET 2011
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);
--
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)
--
Răzvan
More information about the so
mailing list