elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Preguntas de teoría sobre funciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Preguntas de teoría sobre funciones  (Leído 2,438 veces)
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Preguntas de teoría sobre funciones
« en: 11 Enero 2012, 19:39 pm »

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


En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Preguntas de teoría sobre funciones
« Respuesta #1 en: 11 Enero 2012, 20:26 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:

Código
  1. void algo(int *a) {
  2. *a = 2;
  3. }
  4.  
  5. int main(void)
  6. {
  7.    int x = 10;
  8.    algo(&x);
  9.    printf("%d\n", x);
  10.    return 0;
  11. }

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.

¿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:

Código
  1. void algo(void) {
  2. int x = 345;
  3. }
  4.  
  5. int main(void)
  6. {
  7.    algo();
  8.    /* x no existe dentro de la función main() */
  9.    printf("%d\n", x);
  10.    return 0;
  11. }
  12.  
  13.  

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:

Citar
El 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.


En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Preguntas de teoría sobre funciones
« Respuesta #2 en: 11 Enero 2012, 20:42 pm »

Muchísimas gracias, ahora lo tengo claro.

Saludos.
En línea

satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Preguntas de teoría sobre funciones
« Respuesta #3 en: 11 Enero 2012, 20:45 pm »

Hola

Buenísima explicación Leo

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
En línea

Breakbeat como forma de vida
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines