[elektro] C problema, multiply defined symbol

Moczik Gabor pm-01 at progzmaster.hu
Wed Sep 9 09:35:42 CEST 2009


potyo wrote:
> Én is azt hittem, hogy ha a fájl elején odaírom, hogy pl. unsigned xxx;
> akkor az csak abban a fájlban szereplő függvényekre lesz globális, de a
> többi fájlból nem lesz látható. Viszont most utánaolvasgattam, és azt
> találtam, hogy ha azt akarod, hogy csak abban a fájlban legyen használható,
> akkor elé kell még tenni, hogy static. Ha azt akarod, hogy a többi fájlban
> is elérhető legyen, akkor a többiben meg oda kell tenni, hogy extern.
> Végülis logikus, hogy ha nem írsz static-ot, akkor nem enged több helyen
> azonos nevűt, mert mivan, ha két fájlban is írsz azonos nevű változót, a
> harmadikban meg odapingálod, hogy extern, és akkor nem fogja tudni, hogy
> most melyik változóhoz akarsz hozzáférni...

Hat a static-ot nem tudtam hogy erre is valo.

Nem tunt logikusnak hogy miert pampog, mondvan hogy elofordulhatna egy 
kisse nonszensz eset, hogy mondjuk egy (third-party) libraryban valaki 
definial egy globalis de nem dokumentalt mondjuk 'counter' nevu 
valtozot, akkor azt nekem tudnom kellene a sajat projektem irasakor hogy 
ilyen nem lehet.

Abba mondjuk nem gondoltam bele, hogy nem csak a forrashoz/libraryhoz 
tartozo header fajlban lehet externkent deklaralni, hanem akarhol.

Jo tudni mondjuk hogy a sajat libekben mindenhol at kene javitani 
static-ra, ahol annak kene lennie. :-)

Legutobbi szopas SDCC-re portolasnal hogy a 'data' fenntartott szo, 
irhattam at egy halom 'void send_data(char addr, char data)' jellegu 
fuggvenyemet... Remelem a 'value' meg 'payload' nem lesz fenntartott szo 
valamelyik C2010 szabvanyu compilerben. :-)



More information about the Elektro mailing list