<br>    &gt; * La ce se refera conceptele de &quot;scope&quot; ?i &quot;linkage&quot; în contextul<br>    &gt; programarii în limbajul C? Ce clasificari induc aceste concepte?<br>    &gt;<br>    &gt; Da?i reply la acest mesaj pentru raspunsuri sau discu?ii.<br>

<br>    Nu se implica încumeta nimeni? Urmeaza întrebari mai interesante dupa,<br>    dar trebuie sa trece?i de asta :-)<br><br>    Razvan<br>    _______________________________________________<br>    <a href="http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii">http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii</a><br>

<br><br>Okay, daca urmeaza intrebari mai interesante dupa :-).<br>tl;dr : Imi cer scuze ca e asa lung post-ul si in mod cert imi cer scuze pentru<br>erorile inerente.<br><br>Din ce stiu ambele concepte se refera la lucruri asemanatoare in C, in esenta la<br>

accesibilitatea identificatorilor.<br><br>In C un nume (un identificator) are scope. Scope-ul decide care sunt partile<br>unui program care pot accesa un nume :). Exista:<br><br>    * block-level scope<br>    * function prototype scope<br>

    * file scope<br><br>- Identificatorii definiti intr-un scope &quot;block&quot; (adica intre acolade) nu sunt<br>vizibili decat acolo. In mod normal (C89) variabilele dintr-un bloc sunt<br>declarate la inceput. C99 permite sa le declari unde vrei.<br>

<br>&lt;anti vs rant&gt;Visual Studio 2010 inca nu suporta decat partial C99 :-). Serios,<br>definiti un proiect win32, adaugati un fisier cu extensia .c (nu cpp) si<br>incercati sa definiti o variabila dupa inceputul functiei). Din ce scria un VS<br>

fanboy pe un blog, aparent MS se axeaza pe C++0x &lt;/anti vs rant&gt;.<br><br>- Exista si &quot;function prototype scope&quot;. Spre exemplu in prototipul<br><br>int foo (int bar, int baz);<br><br>&quot;bar&quot; si &quot;baz&quot; sunt definite din momentul in care apar pana in momentul in care<br>

se incheie prototipul (atentie, ma refer la prototip deci la declaratie, nu la<br>definitie - prefer sa consider definitia unei functii sub regulile &quot;block-level<br>scope&quot;). In general numele pot fi (si sunt) omise. Doar tipurile conteaza.<br>

<br>- Pentru file scope trebuie sa discutam despre linkage. In C exista obiecte<br>externe (fie variabile fie functii) care nu sunt definite in nici o alta functie<br>(extern versus intern). Functiile sunt mereu interne - C nu permite functii<br>

nested (&quot;imbricate&quot; :P).<br><br>Obiectele externe, spre deosebire de cele interne, au linkage. Exista &quot;internal<br>linkage&quot; si &quot;external linkage&quot;. Un identificator are in mod implicit external<br>

linkage - adaugandu-i cuvantul cheie &quot;static&quot; ii dam internal linkage (este cu<br>adevarat nefericita coliziunea de nume, &quot;static&quot; inseamna altceva pentru<br>identificatorii dintr-un bloc) .<br><br>Un identificator cu external linkage poate fi folosit oriunde intr-un program cu<br>

multe fisiere. Un identificator cu internal linkage poate fi folosit oriunde in<br>fisier. (Okay, nu e vorba de &quot;fisiere&quot; ci de &quot;translation units&quot;).<br><br>Trebuie avut grija la un aspect legat de definire. In mod normal definim o<br>

variabila sus in fisier si o folosim in functii fara probleme. *Daca o functie<br>refera o variabila inainte ca aceasta sa fie definita sau variabila e<br>definita in alt fisier, trebuie folosit cuvantul cheie &quot;extern&quot;.<br>

<br>E mereu importanta distinctia dintre a declara si a defini (eu nu ma simt in<br>stare sa atac subiectul insa K&amp;R il refera in fiecare capitol impreuna cu<br>&quot;storage classes&quot;).<br><br>Catalin<br>