[ Foro para dudas y novedades ]

Especificadores

05-Aug-2006 23:47
sergio herrera
3 Respuestas

Hola

Leyendo un libro de C/C++, en una pagina me encontre estos especificadores, o al menos asi le llaman. Lo lei como 5 veces y no le entendi nada :P, comentaron que no son necesarios ponerlos, pero eso no resuelve mi duda .¿Para que sirven?

Los especificadores son:

auto
register
extern
static

De antemano Gracias ;)

07-Aug-2006 01:12
Nacho Cabanes (+84)

Permiten indicar características adicionales que tú desearías que tuviera una variable:

- "register" es para indicarle al compilador que intente guardar una variable en uno de los registros del procesador, para que su manejo sea más rápido:

register int x;

- "extern" indica que una variable (o una función) se ha declarado fuera de tu programa, habitualmente en otro fuente que vas a enlazar junto con el tuyo.

- "static" permite que el valor de una variable local (la que está definida dentro de una función) se conserve entre llamadas a la función, en vez de perderse cuando se sale.

- "auto" casi que... no quiere decir nada ;-)   Se usa para variables locales con su vida normal, lo opuesto a "static". Como es lo normal, no se suele escribir.



10-Aug-2006 05:03
sergio herrera

Oye muchas gracias ;)

Aunque me podrias poner un ejemplo para ver como trabajan :)

Parece ser que te entiendo mejor a ti que al autor del libro :D

Saludos



13-Aug-2006 19:12
Nacho Cabanes (+84)

Es difícil poner un ejemplo corto.

Aun así:
  • "auto" no necesita ejemplo, porque es lo habitual  ;-)
  • "static" es difícil de poner un ejemplo, porque tienes que pensar una función a la que se llame varias veces dentro de un programa, y que tenga una variable local cuyo valor se deba conservar entre distintas llamadas a la función. Ahora mismo, a mí no se me ocurre ningún ejemplo. En cualquier caso, es algo que típicamente se suele resolver usando una variable global, pero que C permite hacer de forma más elegante, con una variable que realmente es local, pero cuyo valor no se pierde cada vez que sales de la función.
  • "register" se usa para variables sencillas en operaciones repetitivas en las que quieras optimizar la velocidad al máximo (aunque no tengas garantías reales de que tu variables se vaya a poder guardar en un registro del procesador, en lugar de en la memoria principal).
  • "extern" tampoco es fácil en un ejemplo corto. Imagina que tienes una variable global "i" en tu programa, y que tu programa es tan grande que está repartido en varios ficheros. Pues bien, en uno de los ficheros declararías realmente la variable con algo como "int i = 0;"  y en el resto de los ficheros dirías que "i" existe pero que está declarada en otro sitio, poniendo "extern int i;".

Espero que, a pesar de no se ejemplos reales ;-) te aclare un poco más el uso y te ayude a ti mismo a inventar o buscar algún ejemplo.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)