Analia Hojman, el  6 de abril a las 19:12 me escribiste:
> Buenas..en esta ocacion se me esta presentando la siguiente duda:
> 
> En C, por que razon hace falta poner "static" a una funcion, al querer que la 
> misma sea privada?
> Digo, si uno no la hace static, no la incluye en el .h, y el .cpp no es 
> entregado, no estaria siendo privada de todas formas?¿

Eso sería seguridad por oscuridad. Sería privada en el sentido de que
quien recibe el .h y el .o (o como sea que lo entregues) no sabe que
existe. Pero si supiera que existe, puede declarar la función en
cualquier lado y usarla.

Otro problema que existe si no usás static es, por ejemplo, si tu modulo.c
tiene:

int min(int x, int y);

No la incluís en el .h por lo tanto para vos sería "privada".

Pero a la persona que usa el .h se le ocurre definir otra función, que
puede tener la misma firma u otra pero el mismo nombre, por ejemplo:

int min(Lista* l);

Cuando el tipo linkee su código con el .o que le entregaste vos, el linker
va a fallar, quejándose de múltiples definiciones de min (en C, en C++ no
pasa porque el nombre de la función incluye, de una forma u otra, sus
parámetros). La única forma de evitar esto es definiendo tu función
static.


Básicamente static hace que una función no exista para el linker.

-- 
Leandro Lucarella (luca) | Blog colectivo: http://www.mazziblog.com.ar/blog/
----------------------------------------------------------------------------
GPG Key: 5F5A8D05 (F8CD F9A7 BF00 5431 4145  104C 949E BFB6 5F5A 8D05)
----------------------------------------------------------------------------
EXTRAÑA RELACION ENTRE UN JUBILADO Y UN JABALI
        -- Crónica TV
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a