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
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).
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();
for (i = 0; i < 5; i++)
g();
return EXIT_SUCCESS;
}
void f(void)
{
int i = 100;
i++;
}
void g(void)
{
static int i = 200;
i++;
}
Y su salida es:
100
100
100
100
100
----
200
201
202
203
204
Un saludo