Preguntas de teoría sobre funciones

Iniciado por DickGumshoe, 11 Enero 2012, 19:39 PM

0 Miembros y 1 Visitante están viendo este tema.

DickGumshoe

Hola.
.
En mis apuntes vienen las siguientes preguntas de teoría, pero a mí me parece que se contradicen:

¿Debe una función acceder a variables de fuera de la función?
   

NO DEBE HACERLO. SOLO SI SE LE PASA COMO PARÁMETROS





¿Se puede acceder desde fuera de una función a una variable definida dentro?
   

NO

¿Se puede acceder desde dentro de una función a una variable definida fuera?
   

SI, AUNQUE HAY QUE EVITARLO EN LA MEDIDA DE LO POSIBLE


¿Alguien me las podría explicar?

Saludos y muchas gracias

leogtz

Cita de: DickGumshoe en 11 Enero 2012, 19:39 PM
¿Debe una función acceder a variables de fuera de la función?
NO DEBE HACERLO. SOLO SI SE LE PASA COMO PARÁMETROS

Esto se utiliza cuando pasas una variable como referencia, pasas una referencia como parámetro a la función y esta puede modificar su valor.

Ejemplo:

void algo(int *a) {
*a = 2;
}

int main(void)
{
    int x = 10;
    algo(&x);
    printf("%d\n", x);
    return 0;
}


Dentro de la función algo, modificamos el valor de la variable x dentro de main, ya que le estamos pasando a la función una referencia, así esta puede modificar libremente su valor, ya que conoce la dirección de memoria.

Cita de: DickGumshoe en 11 Enero 2012, 19:39 PM
¿Se puede acceder desde fuera de una función a una variable definida dentro?
NO

No se puede, ya que una variable definida dentro de una función, es local en esa misma función, es decir, solo tiene validez dentro de la función, por lo cual no podemos acceder a su valor desde afuera.

Ejemplo, es incorrecto suponer esto:

void algo(void) {
int x = 345;
}

int main(void)
{
    algo();
    /* x no existe dentro de la función main() */
    printf("%d\n", x);
    return 0;
}



Citar¿Se puede acceder desde dentro de una función a una variable definida fuera?
SI, AUNQUE HAY QUE EVITARLO EN LA MEDIDA DE LO POSIBLE

Ahí está hablando implícitamente de VARIABLES GLOBALES, trabajar mucho con variables globales, no es una buena práctica de ingeniería de software.

Te cito de la wikipedia:

CitarEl uso de este tipo de variables suele considerarse como una mala práctica, por el riesgo que conlleva esa deslocalización: una variable global puede ser modificada en cualquier parte del programa (a menos que resida en una sección de memoria protegida) y cualquier parte del programa depende de ella. Es por ello que una variable global tiene un potencial ilimitado para crear dependencias, factor éste que aumenta la complejidad. Sin embargo, en algunas ocasiones, las variables globales resultan muy útiles. Por ejemplo, se pueden usar para evitar tener que pasar variables usadas muy frecuentemente de forma continua entre diferentes subrutinas.

Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

DickGumshoe

Muchísimas gracias, ahora lo tengo claro.

Saludos.

satu

Hola

Buenísima explicación Leo

Cita de: Leo Gutiérrez. en 11 Enero 2012, 20:26 PM
Ahí está hablando implícitamente de VARIABLES GLOBALES, trabajar mucho con variables globales, no es una buena práctica de ingeniería de software.

Es lo que en diseño de sistemas se conoce como "acoplamiento de entorno común", el segundo tipo de acoplamiento más 'indeseado'.

Citar
Este tipo de acoplamiento sucede cuando se manejan estructuras comunes. Este acoplamiento es muy peligroso, ya que módulos que no teniendo conexión en el mapa de estructura, pueden estar acoplados al manejar zonas comunes, como pueden ser areas de memoria, ficheros de datos, etc.
Esto no quiere indicar que no se utilicen variables globales ni recursos compartidos.  intentamos tan solo, advertir al diseñador del peligro potencial de errores al manejar estructuras comunes.

Saludos
Breakbeat como forma de vida