[ 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 ![]() Pozdrav. |
[ Milan Aksic @ 24.08.2001. 00:01 ] @
[ 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. Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|