[C] error: 'for' loop initial declarations are only allowed in C99 mode ?

Iniciado por TØtti, 29 Noviembre 2016, 04:06 AM

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

TØtti

Buenas. Estaba viendo la sintaxis de C y coloco el siguiente código:

int main(int argc, char const *argv[])
{
  int var[] = {20, 30, 40, 50};
  for(int i; i < sizeof(var); i++)
  {
      printf("%d-%d", i, var[i]);
  }

   return 0;
}


y da el error: 'for' loop initial declarations are only allowed in C99 mode

Estoy usando CodeBlocks 13.12 y el compilador es GNU CCC

engel lex

#1
estás usando C y los standard comunes de  C son los antiguos (c89 y 90 si no mal recuerdo)

en estos standards no puedes hacer cosas como declarar una variable dentro de la declaración de un ciclo

for(int i; i < sizeof(var); i++)

tienes 2 opciones:
declararlo fuera del ciclo
int i;
for(i=0; i < sizeof(var); i++)


o compilar como c99 que es la versión donde por primera vez tiene soporte una serie de elementos, como declaración en ciclos
https://en.wikipedia.org/wiki/C99


por otro lado tienes un error... declaras "i" pero no le das un valor inicial... entonces que valor contiene "i" al ser declarado? (si dices que 0, normalmente la respuesta es incorrecta)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

TØtti

Cita de: engel lex en 29 Noviembre 2016, 04:13 AM
estás usando C y los standard comunes de  C son los antiguos (c89 y 90 si no mal recuerdo)

en estos standards no puedes hacer cosas como declarar una variable dentro de la declaración de un ciclo

for(int i; i < sizeof(var); i++)

tienes 2 opciones:
declararlo fuera del ciclo
int i;
for(i=0; i < sizeof(var); i++)


o compilar como c99 que es la versión donde por primera vez tiene soporte una serie de elementos, como declaración en ciclos
https://en.wikipedia.org/wiki/C99


por otro lado tienes un error... declaras "i" pero no le das un valor inicial... entonces que valor contiene "i" al ser declarado? (si dices que 0, normalmente la respuesta es incorrecta)

Gracias. Pues acabo de probar y es 2, que a diferencia de los demás tipos sin me da 0. E incluso con short.

engel lex

no siempre será 2 XD y con demás tipos tambien tienes que darle valor ya que no sabes cuando te dará un valor inesperado
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.