Home
Username:
Password:
C Programming (Español) Tutorials

Ámbito / Soluciones del Capítulo 14




Visitors to VTC.com will be able to view all introductory videos for each training course.
Free Trial Members will gain access to first three chapters for each training course.
Full Access Members have full access to VTC.com’s entire library of video tutorials.


Learn More

Subtitles of the Movie

Estas son las soluciones del capitulo 14 en relacion al ambito. Este es el archivo "scope.c". Utilizaremos este programa para resolver el ejercicio de las 3 variables visibles en el mismo lugar, al menos teoricamente. Podemos hacerlo de varias manerasÉ y esta es la que he escogido. Tenemos una variable global llamada "x" con el valor 100, otra variable "x" de tipo "float" con el valor 200, es decir con un tipo diferente a la anterior, y una tercera variable "x" dentro de un bloque con el valor 300. Teoricamente, en esta linea de codigo no sabemos cual escoger. De hecho lo sabemos, pues conocemos la norma, pero si no lo supieramosÉ el compilador generaria un error. Antes de ejecutarlo para ver lo que obtenemos, veamos esta linea de codigo en la cual verificamosÉ si "x" es mayor que 150. Esto sera interesante porque no sabemos si "x" contendra el valor 200 o 100. Incluso, Àllegaremos a esta sentencia "if"? Es una buena pregunta. La respuesta depende de lo que ocurra al ejecutar el programa. No obtenemos errores y aparece "The value of x is 300". ÀPor que obtenemos el valor 300? Recuerde que la norma indica que si tenemos alguna ambigŸedad en cuanto a cual variable "x" escoger, utilizamos la que tenga el menor ambito, en este caso esta variable. Esa es la norma. Aqui utilizamos de nuevo la variable "x". ÀCual sera utilizada en este caso? ÀSera esta, esta o esta otra? Nunca se utilizara estaÉ porque ni siquiera es visible en este puntoÉ aunque parezca serlo. Este es un sub-bloque que ni siquiera ha sido creado en este puntoÉ donde vamos a verificar esta condicion en particular. Nos quedan estas dos variables. De nuevo tenemos una ambigŸedad. Esta es la que tiene el menor ambitoÉ y contiene el valor 200. 200 es mayor que 150, asi que ejecutamos esta sentencia "printf". Ese es el archivo "scope.c". Veamos el segundo ejercicio en el que tenemos dos funciones con el mismo nombre. Aqui tenemos otro proyecto con dos archivos llamado "static"É ubicado en la carpeta "Solutions". Este es el archivo "static1.c" que contiene la funcion "initialise". Esta es una funcion estatica que asigna el valor 100. a la variable global llamada "count". La funcion "main" llama a la funcion "initialise" y luego a la funcion "func". Veamos la otra funcion llamada "func". Este es el archivo "static2.c" y esta es la funcion "func" llamada desde la funcion "main". Esta simplemente llama a otra funcion "initialise"É que tenemos aqui. Esta tambien es una funcion estatica que asigna el valor 200 a la variable "count". En este caso, esta no es la misma variable global "count" sino otra una variable local estatica tambien llamada "count". Tenemos dos funciones llamadas "initialise", una aqui y otra en el archivo "static1.c". Esta asigna el valor 200 a "count" y esta le asigna el valor 100. Primero llamamos a esta funcion "initialise" y luego a la funcion "func" que llama a la otra funcion "initialise", la cual asigna el valor 100 a otra variable "count". Finalmente desplegamos el valor de "count". ÀPuede decir cual sera? Veamos. Compilamos sin errores, ejecutamos y obtenemos "The value of count is 100". Tal vez usted lo esperaba, pero Àpor que 100? Ciertamente se ha llamado a la otra funcion "initialise", pero no se ha modificado esta version de la variable "count"É sino que se ha modificado la otra version de "count". Este no es el punto del programaÉ sino demostrar que tenemos dos funciones llamadas "initialise". Ambas funciones son estaticas, pero la unica que es visible desde este punto del codigo es esta. Asi mismo, en el archivo "static2.c"É la unica que es visible desde este punto del codigo es esta. La funcion obtenida depende del lugar desde el cual llamemos a la funcion "initialise", lo cual es muy confuso. ÀPuede pensar en una razon para utilizar este proceso? Digamos que tenemos un sistema de desarrollo a gran escalaÉ y que tenemos dos programadores trabajando llamados Bob y Harry. Pedimos a Bob que se encargue del sub-sistema de pantallasÉ y que sea responsable de la interfaz del usuario y pedimos a Harry que sea responsable de la base de datos. Digamos que ellos no se comunican entre si y crean un grupo de funciones cada uno. Tambien digamos que ambos crearon una funcion "initialise"É sin estar de acuerdo. ÀQue hariamos? ÀDeberia uno de ellos renombrar su funcion? La respuesta es no. De hecho, esto no importa siempre y cuando ambas funciones "initialise" sean estaticasÉ y siempre y cuando la parte principal del programa no tenga que llamarlas directamente. Esto sucede muy a menudo en la programacion en el C, en especial en sistemas a gran escala, pues es dificil hacer un seguimiento de los nombres de todas las funcionesÉ y asegurarnos de que sean diferentesÉ verificando cada una de ellas. Si queremos crear una funcion en algun lugar para que realice alguna tarea, podemos asignarle cualquier nombre siempre y cuando sea estatica. De hecho, todas las funciones deben ser estaticas. a excepcion de aquellas que representan la funcionalidad del programa en una interfaz publica. Por ejemplo, la persona encargada de la base de datosÉ podria ofrecer unas funciones llamadas "read_a_record", "write_a_record", "search_for_a_record" y "delete_a_record"É y podria decidir que solo estas esten disponibles. Sin embargo, pudo haber escrito 60 funciones diferentes para realizar tareas secundarias. El puede asignar cualquier nombre a esas otras 56 funcionesÉ porque estas no son parte de la interfaz publica de las rutinas de esta base de datos. Puede asignarles el nombre que desee siempre y cuando estas sean estaticas. Esto es importante, asi que debemos crear funciones estaticas cuando sea posible, obviamente a excepcion de aquellas que utilizaran otras personas. Finalmente veamos el proyecto del curso. Este es el archivo "main.c"É y esta es la unica linea que he modificado. Esta se encontraba abajo en la funcion "main", pero la he extraido de alli y basicamenteÉ la he hecho una variable globalÉ en el sentido de que solo puede ser accedida desde este archivo en particular. Esto se debe a la palabra reservada "static". Este programa aun funciona y no es necesario comprobarlo. Usted probablemente ya lo ha hecho. Tal vez usted se pregunte si las otras funciones como "read_cd" o "print_cd"É tambien necesitan acceder a este arreglo. ÀTienen que acceder a este arregloÉ ya que de hecho estan desplegando sus elementos? La respuesta es si, pero recuerde que les pasamos como parametro el CD que queremos desplegar, asi que no tienen que acceder a todo el arregloÉ sino solo al elemento que queremos utilizar en un momento determinado. En ese momento les indicamos el elemento en cuestion, asi que no tienen que ver todo el arreglo, como lo comprueba el hecho de que el programa funciona. Con esto terminamos el capitulo del ambito.

Tutorial Information

Course: C Programming (Español)
Author: Mark Virtue
SKU: 33759
ISBN: 1-933736-81-X
Release Date: 2007-04-16
Duration: 21.5 hrs / 139 lessons
Captions: Available on CD and Online University
Compatibility: Vista/XP/2000, OS X, Linux
QuickTime 7, Flash 8

VTC Sign up & Benefits

  • Unlimited Access
  • 98,729 Video Tutorials (23,265 free)
  • Video Available as Flash or QuickTime
  • Over 1026 Courses
  • $30 for One Month Access
  • Multi-User Discounts Available