Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: TØtti en 29 Noviembre 2016, 04:06 am



Título: [C] error: 'for' loop initial declarations are only allowed in C99 mode ?
Publicado por: TØtti en 29 Noviembre 2016, 04:06 am
Buenas. Estaba viendo la sintaxis de C y coloco el siguiente código:

Código
  1. int main(int argc, char const *argv[])
  2. {
  3.   int var[] = {20, 30, 40, 50};
  4.   for(int i; i < sizeof(var); i++)
  5.   {
  6.       printf("%d-%d", i, var[i]);
  7.   }
  8.  
  9.    return 0;
  10. }
  11.  

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


Título: Re: [C] error: 'for' loop initial declarations are only allowed in C99 mode ?
Publicado por: 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

Código
  1. for(int i; i < sizeof(var); i++)

tienes 2 opciones:
declararlo fuera del ciclo
Código
  1. int i;
  2. 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 (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)


Título: Re: [C] error: 'for' loop initial declarations are only allowed in C99 mode ?
Publicado por: TØtti en 2 Diciembre 2016, 19:11 pm
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

Código
  1. for(int i; i < sizeof(var); i++)

tienes 2 opciones:
declararlo fuera del ciclo
Código
  1. int i;
  2. 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 (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.


Título: Re: [C] error: 'for' loop initial declarations are only allowed in C99 mode ?
Publicado por: engel lex en 2 Diciembre 2016, 19:18 pm
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