¿Cómo soluciono el error GCC "para la declaración inicial de bucle utilizada fuera del modo C99"?

StackOverflow https://stackoverflow.com/questions/24881

  •  09-06-2019
  •  | 
  •  

Pregunta

Estoy tratando de resolver el problema 3n + 1 y tengo un para que tiene este aspecto:

for(int i = low; i <= high; ++i)
        {
                res = runalg(i);
                if (res > highestres)
                {
                        highestres = res;
                }

        }

Desafortunadamente, recibo este error cuando intento compilar con GCC:

  

3np1.c: 15: error: 'for' loop initial   declaración utilizada fuera del modo C99

No sé qué es el modo C99. ¿Alguna idea?

¿Fue útil?

Solución

¡Intentaría declarar i fuera del bucle!

Buena suerte al resolver 3n + 1 :-)

Aquí hay un ejemplo:

#include <stdio.h>

int main() {

   int i;

   /* for loop execution */
   for (i = 10; i < 20; i++) {
       printf("i: %d\n", i);
   }   

   return 0;
}

Lea más en for loops en C aquí .

Otros consejos

Hay un interruptor del compilador que habilita el modo C99 , que entre otras cosas permite la declaración de un variable dentro del bucle for. Para activarlo, use el conmutador del compilador -std=c99

O como dice @OysterD, declare la variable fuera del bucle.

Para cambiar al modo C99 en CodeBlocks , siga los siguientes pasos:

Haga clic en Proyecto / Opciones de compilación , luego en la pestaña Configuración del compilador elija la subpestaña Otras opciones , y coloque -std = c99 en el área de texto y haga clic en Aceptar .

Esto activará el modo C99 para tu compilador.

¡Espero que esto ayude a alguien!

También he recibido este error.

for (int i=0;i<10;i++) { ..

no es válido en el estándar C89 / C90. Como dice OysterD, tienes que hacer:

int i;
for (i=0;i<10;i++) { ..

Su código original está permitido en C99 y estándares posteriores del lenguaje C

.

@Blorgbeard :

Nuevas funciones en C99

  • funciones en línea
  • declaración variable ya no está restringida al alcance del archivo o al inicio de una declaración compuesta
  • varios tipos de datos nuevos, incluidos int largos largos, tipos enteros extendidos opcionales, un tipo de datos booleano explícito y un tipo complejo para representar números complejos
  • matrices de longitud variable
  • soporte para comentarios de una línea que comienzan con //, como en BCPL o C ++
  • nuevas funciones de biblioteca, como snprintf
  • nuevos archivos de encabezado, como stdbool.h e inttypes.h
  • funciones matemáticas genéricas de tipo (tgmath.h)
  • soporte mejorado para el punto flotante IEEE
  • inicializadores designados
  • literales compuestos
  • soporte para macros variadic (macros de aridad variable)
  • restringir la calificación para permitir una optimización de código más agresiva

http://en.wikipedia.org/wiki/C99

Un recorrido por C99

si compilas en C cambio

for (int i=0;i<10;i++) { ..

a

int i;
for (i=0;i<10;i++) { ..

También puede compilar con el conjunto de interruptores C99. Ponga -std = c99 en la línea de compilación:

gcc -std=c99 foo.c -o foo

REF: http://cplusplus.syntaxerrors.info/index.php?title= 'for'_loop_initial_declaration_used_outside_C99_mode

Tuve el mismo problema y funciona, solo tienes que declarar i fuera del bucle:

int i;

for(i = low; i <= high; ++i)

{
        res = runalg(i);
        if (res > highestres)
        {
                highestres = res;
        }

}

Para cualquier persona que intente compilar código de una fuente externa que use una utilidad de compilación automática como Make , para evitar tener que rastrear las llamadas explícitas de compilación de gcc, puede establecer una variable de entorno. Ingrese en el símbolo del sistema o ingrese .bashrc (o .bash_profile en Mac):

export CFLAGS="-std=c99"

Tenga en cuenta que se aplica una solución similar si se encuentra con un escenario similar con la compilación de C ++ que requiere C ++ 11, puede usar:

export CXXFLAGS="-std=c++11"

Para Qt-creator: simplemente agregue las siguientes líneas al archivo * .pro ...

QMAKE_CFLAGS_DEBUG = \
    -std=gnu99

QMAKE_CFLAGS_RELEASE = \
    -std=gnu99

Jihene Stambouli respondió la pregunta de OP más directamente ... La pregunta era; por qué

for(int i = low; i <= high; ++i)
{
    res = runalg(i);
    if (res > highestres)
    {
        highestres = res;
    }
}

produce el error;

3np1.c:15: error: 'for' loop initial declaration used outside C99 mode

para el cual la respuesta es

for(int i = low...

debería ser

int i;
for (i=low...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top