Duda sobre el ambito de las variables automaticas

Iniciado por Caster, 6 Octubre 2012, 12:30 PM

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

Caster

el ambito de una variable una variable automatica puede ser menor que una funcion? una instruccion por ejemplo:
for (auto int i = 5; i < count; ++i)
{
/* code */
}


Es decir, que el valor 5 para la variable solo valga para este bucle, no se si me explico, es que en el libro que estoy leyendo dice que si pero no da ningun ejemplo sobre como se puede utilizar de esta manera.

Saludos

overxfl0w13

Cita de: Caster en  6 Octubre 2012, 12:30 PM
el ambito de una variable una variable automatica puede ser menor que una funcion? una instruccion por ejemplo:
for (auto int i = 5; i < count; ++i)
{
/* code */
}


Es decir, que el valor 5 para la variable solo valga para este bucle, no se si me explico, es que en el libro que estoy leyendo dice que si pero no da ningun ejemplo sobre como se puede utilizar de esta manera.

Saludos

http://c.conclase.net/curso/?cap=025

Ese modificador es aplicado por defecto si no se especifica ningún otro y si, es el correspondiente a todas las variables locales así que éstas desaparecen con la finalización del bloque.
[/url]

Caster

Y se podria utilizar otro?, asi por ejemplo:

for (static int i = 0; i < count; ++i)
{
/* code */
}

overxfl0w13

Cita de: Caster en  6 Octubre 2012, 14:06 PM
Y se podria utilizar otro?, asi por ejemplo:

for (static int i = 0; i < count; ++i)
{
/* code */
}


Claro, con static estarías "aumentando" el ámbito de la variable.
[/url]

Caster


rir3760

Cita de: Caster en  6 Octubre 2012, 12:30 PMel ambito de una variable una variable automatica puede ser menor que una funcion? una instruccion por ejemplo:
for (auto int i = 5; i < count; ++i)
{
/* code */
}


Es decir, que el valor 5 para la variable solo valga para este bucle
Correcto. El ámbito o alcance de una variable declarada dentro un bloque inicia justo después de su declaración y continua hasta el termino de este (del bloque).

Cita de: Caster en  6 Octubre 2012, 14:06 PM
Y se podria utilizar otro?, asi por ejemplo:

for (static int i = 0; i < count; ++i)
{
/* code */
}
No.


Primero porque en C99 y C11 es posible declarar variables locales a los bucles "for" pero solo pueden incluir los calificadores "register" y "auto", utilizar (como en tu caso) "static" no es valido.


Segundo porque "static" no afecta el alcance de una variable sino su tipo de almacenamiento (en buen cristiano: la duración o "vida" de la variable):

* Las variables automáticas se crean justo en su declaración y desaparecen al terminar su ámbito (el bloque al que pertenecen).

* Las variables estáticas se crean, conceptualmente, justo antes de iniciar el programa y se inicializan con el valor indicado (si no existe su valor inicial es 0, 0.0 o NULL dependiendo del caso). Ellas desaparecen justo antes de terminar la aplicación.

Un programa de ejemplo:
#include <stdio.h>
#include <stdlib.h>

void f(void);
void g(void);

int main(void)
{
   int i;
   
   for (i = 0; i < 5; i++)
      f();
   
   puts("----");
   
   for (i = 0; i < 5; i++)
      g();
   
   return EXIT_SUCCESS;
}

void f(void)
{
   int i = 100;
   
   printf("%d\n", i);
   i++;
}

void g(void)
{
   static int i = 200;
   
   printf("%d\n", i);
   i++;
}


Y su salida es:
100
100
100
100
100
----
200
201
202
203
204


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language