[ Milan Aksic @ 24.08.2001. 00:01 ] @
Nije potpuno nepoznat ali mi je malo nejasn, modifikator extern, pa ako bi neko mogao da mi ga sto bolje objasni, najbolje na primeru sa komentarom. Trazim previse ali ako neko ima vremena neka napise, inace sta god.
Pozdrav.
[ Vojislav Milunovic @ 24.08.2001. 14:18 ] @
Evo jedan primer koriscenja extern ->>>

Code:

int gg(){
  printf("cool \n");
}


i
Code:

extern int gg();
int main(){
  gg();
}


prvi je gg.c a drugi je gg1.c zatim uradis:

gcc -c gg.c
gcc -c gg1.c
pa onda gcc gg.o gg1.o -ogg
startuj program ./gg i dobijes output cool

Znaci extern ti omogucuje da koristis neki symbol u obj fileu koji se nalazi u drugom obj fileu ;o) i onda ih ulinkujes zajedno i to lepo radi.
recimo sa extern mozes da dograbis bilo koju funkciju iz modula koja se u kernelu exportuje preko /proc/ksyms
[ kajla @ 24.08.2001. 15:59 ] @
Da jos jedna stvar u vezi da extern je da za razliku od automatic varijabli nemora da se setuje na 0, jer kad deklarises varijablu za extern ona je pri deklaracije setovana na 0.

poz.
[ c00l_daem0n @ 24.08.2001. 17:02 ] @
kao sto predator kaze, a moze i za ovako nesto

BOF
--------
#include <stdio.h>

int main(int argc, char *argv[])
{
extern int a;
printf("%dn",a);
return 0;
}
...
...
int a=1;
----------
EOF

pogledaj sta bi dobio da stavis bez extern.
znaci moze da se koristi i kad imas samo jedan file
[ Milan Aksic @ 24.08.2001. 18:08 ] @
Citat:
c00l_daem0n je napisao:
kao sto predator kaze, a moze i za ovako nesto

BOF
--------
#include <stdio.h>

int main(int argc, char *argv[])
{
extern int a;
printf("%dn",a);
return 0;
}
...
...
int a=1;
----------
EOF

pogledaj sta bi dobio da stavis bez extern.
znaci moze da se koristi i kad imas samo jedan file


Ovo mi je malo nejasno sto si napisao. Ti si u main-u deklarisao int a, a zatim izvan main funkcije opet deklarisao i inicijalizovao. Onda ispada da je ova izvan main-a nova promenljiva?
A ako je ovo gore tako kao sto si napisao, da li onda uvek moram da deklarisem 'ponovo' u drugom fajlu istu tu promenljivu koja je ranije deklarisana sa extern u prvom fajlu.

Pozdrav.
[ kajla @ 24.08.2001. 20:24 ] @
Da bi ti malo pojasnio evo:

Recimo imas program koji je smesten u vise source file-ova u prvom fajlu koji se zove recimo prg_1.c imas:
Code:

int i; /*global varijabla*/
.
.

i imas drugi source file prg_2.c iz koga hoces da pristupis varijabli int i iz prvog source file-a:
Code:

extern int i;

Ovim si kompajleru rekao da je varijabla int i deklarisana negde drugde (u drugom source file-u), na ovaj nacin pristupas varijabli u drugom .obj fajlu. (prg_1.c i prg_2.c ce biti kompalirani u dva .obj fajla koja ce na kraju biti linkovana)

poz.

[Ovu poruku je menjao kajla dana 08-24-2001 u 08:26 PM GMT]
[ c00l_daem0n @ 25.08.2001. 10:54 ] @
kada kazs int a; ti deklarises promenljivu, a extern deklaracijom
mu kazes samo da postoji negde(u istom,ili u drugom file-u) promenljiva a
[ Vojislav Milunovic @ 25.08.2001. 15:45 ] @
Citat:
kajla je napisao:
Da bi ti malo pojasnio evo:

Recimo imas program koji je smesten u vise source file-ova u prvom fajlu koji se zove recimo prg_1.c imas:


Ja se izvinjavam na opasci ali mislim da sam ovo pomenuo ?
extern nikad nije setovan na 0 jer on jednostavno kaze da negde postoji symbol sa tim imenom koji ce da se nadje i realocira se sve lepo u odnosu na taj sysmbol.
Zasto je 0 ? Zato sto ti alociras data na bss/data segmentu koji su setovani na 0 po diazanju programa u memoriju (to je takozvana uninitialized memorija)
eto to je cela pricao extern ;o)
[ kajla @ 25.08.2001. 19:08 ] @
Citat:
predator je napisao:
Ja se izvinjavam na opasci ali mislim da sam ovo pomenuo ?
extern nikad nije setovan na 0 jer on jednostavno kaze da negde postoji symbol sa tim imenom koji ce da se nadje i realocira se sve lepo u odnosu na taj sysmbol.
Zasto je 0 ? Zato sto ti alociras data na bss/data segmentu koji su setovani na 0 po diazanju programa u memoriju (to je takozvana uninitialized memorija)
eto to je cela pricao extern ;o)

Nisam se dobro izrazio...nije setovan na 0 vec je 0 - uglavnom poenta je da nemora da se setuje na 0.

poz.
[ Vojislav Milunovic @ 26.08.2001. 00:18 ] @
Da moguce da sam ja lose protumacio ;o)
Ok sve jedno resismo i ovaj problem...a sad hint pitanje static funkcija ?

Odgovor : Imate dva obj filea i u jednom static funkciju nju necete moci da pozovete iz drugog obj jel se sysmboli ne exportuju vec ostaju private samo za taj obj file ;o)


[Ovu poruku je menjao predator dana 08-25-2001 u 11:19 PM GMT]
[ kajla @ 26.08.2001. 17:57 ] @
Citat:
predator je napisao:
Da moguce da sam ja lose protumacio ;o)
Ok sve jedno resismo i ovaj problem...a sad hint pitanje static funkcija ?

Odgovor : Imate dva obj filea i u jednom static funkciju nju necete moci da pozovete iz drugog obj jel se sysmboli ne exportuju vec ostaju private samo za taj obj file ;o)


[Ovu poruku je menjao predator dana 08-25-2001 u 11:19 PM GMT]

Pa da isto tako static varijabli nemozes da pristupis iz drugog .obj file-a.

poz.