Daca oi spune prostii sa nu loviti prea tare :). <div><br></div><div><br><div class="gmail_quote">2011/2/21 Razvan Deaconescu <span dir="ltr">&lt;<a href="mailto:razvan.deaconescu@cs.pub.ro">razvan.deaconescu@cs.pub.ro</a>&gt;</span><br>

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

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
--<br>
Altul: Fie următoarele<br>
<br>
extern int b; /* global variable */<br>
static int c;<br>
<br>
b referă un external object, are &quot;external linkage&quot;, &quot;file scope&quot;.<br>
c referă un external object, are &quot;internal linkage&quot;, &quot;file scope&quot;.<br>
<br>
În cazul<br>
<br>
int f(int a, int b)<br>
{<br>
    int prod;<br>
    static int sum;<br>
<br>
    ...<br>
}<br>
<br>
Ce se poate spune despre prod și sum? Cu ce diferă cele două din<br>
perspectiva unor terminologii legate de limbajul C? (precum identifier<br>
scope, identifier linkage)<br>
--<br>
Unde sunt stocate variabilele precedate de static în cadrul unei<br>
funcții? (variabila sum din exemplul de mai sus)<br></blockquote><div><br></div><div>Ambele au &quot;block scope&quot; sau &quot;function scope&quot; (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. </div>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<font color="#888888">--<br>
<br>
Răzvan<br>
</font><div><div></div><div class="h5">_______________________________________________<br>
<a href="http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii" target="_blank">http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii</a></div></div></blockquote></div><br><br clear="all"><br>-- <br>Alexandru Damian<br><br>Polytechnic University of Bucharest<br>

   Faculty of Automatic Control and Computers<br>
</div>