[CSProjects] More on static functions

Razvan Deaconescu razvan at anaconda.cs.pub.ro
Mon Jun 18 23:56:19 EEST 2007


Vlad Dogaru wrote:
> Salut,
> 
> sper sa nu abuzez de facilitati si de bunavointa tuturor, dar pana la 
> urma scopul principal al proiectului este sa invatam, inclusiv unii de 
> la altii si toti de la Razvan ;-)
> 
> Situatia:
> * cateva functii care sunt exportate de biblioteca:
> 	* declaratii in spreadconv.h
> 	* implementari in spreadconv.c
> * alte functii (mai multe) care sunt folosite de primele, dar care nu 
> trebuiesc exportate:
> 	* acum locuiesc si ele tot in spreadconv.c
> 	* sunt declarate ca "static"
> 	* as vrea sa le mut
> 
> Intrebarea:
> * daca mut grupul al doilea de functii in "util.c", cu antetul "util.h", 
> includ util.h in spreadconv.c, apoi compilez fiecare *.c si le 
> link-uiesc impreuna, or sa se vada in spreadconv.c functiile din util.c?

Da, se vor vedea. Doar ca nu trebuie sa fie marcate static (altfel sunt 
inutilizabile in modulul lor).

> Daca pastrez "static" in fata lor, probabil ca nu, ca asta inseamna 
> static as far as I know. Daca le fac functii normale, si cineva 
> link-uieste la biblioteca mea, or sa polueze functiile din util.c 
> namespace-ul? Banuiesc ca nu (asta observ abia acum), pentru ca nicaieri 
> in spreadconv.h nu apar antetele lor. Dar ar trebui sa fiu sigur; si nu 
> prea pot testa, pentru ca o sa mai dureze probabil ceva timp pana la 
> prima compilare cu succes a bibliotecii.

Incearca sa compilezi programelul de mai jos:

---
/* stdio.h header deliberately left out */
int main (void)
{
	printf ("Hello, World!\n");

	return 0;
}
---

Totul merge OK; iti apare, intr-adevar, warning de compilare, dar 
link-erul gaseste functia printf in biblioteca standard C.

Deci, cand vei face util.c si util.h, chiar daca un utilizator al 
bibliotecii nu va avea acces la util.h (si la declaratiile de acolo ale 
functiilor), va putea totusi lega functiile de acolo la modulul sau fara 
nici o problema.

Nu ai ce sa-i faci, asa merge C-ul. Poate ca exista niste extensii GCC 
care sa previna exportarea functiilor intr-un alt modul decat al tau, 
dar nu stiu despre ele. Cat timp tu vei expune doar un set de functii in 
spreadconv.h, te poti baza pe 'bunul simt' al utilizatorului bibliotecii 
ca le va folosi _doar_ pe acelea. Daca nu, asta e treaba lui :-)

Razvan



More information about the cspay-dev mailing list