Como faço para corrigir o erro GCC “declaração inicial do loop for usada fora do modo C99”?

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

  •  09-06-2019
  •  | 
  •  

Pergunta

Estou tentando resolver o problema 3n+1 e eu tenho um for loop que se parece com isso:

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

        }

Infelizmente estou recebendo este erro quando tento compilar com o GCC:

3np1.c:15:erro:'Para' Declaração inicial de loop usada fora do modo C99

Não sei o que é o modo C99.Alguma ideia?

Foi útil?

Solução

eu tentaria declarar i fora do circuito!

Boa sorte na resolução de 3n+1 :-)

Aqui está um exemplo:

#include <stdio.h>

int main() {

   int i;

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

   return 0;
}

Leia mais sobre loops for em C aqui.

Outras dicas

Existe uma opção de compilador que permite Modo C99, que entre outras coisas permite a declaração de uma variável dentro do loop for.Para ativá-lo, use a opção do compilador -std=c99

Ou como diz @OysterD, declare a variável fora do loop.

Para mudar para Capítulo 99 modo em Blocos de código, siga as próximas etapas:

Clique Opções de projeto/construção, então na guia Configurações do compilador escolha a subguia Outras opções, e coloque -std=c99 na área de texto e clique em OK.

Isso vai virar Capítulo 99 modo ativado para o seu compilador.

Espero que isso ajude alguém!

Eu também recebi esse erro.

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

não é válido no padrão C89/C90.Como diz o OysterD, você precisa fazer:

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

Seu código original é permitido em padrões C99 e posteriores da linguagem C.

@Blorgbeard:

Novos recursos no C99

  • funções embutidas
  • declaração de variável não está mais restrita ao escopo do arquivo ou ao início de uma instrução composta
  • vários novos tipos de dados, incluindo long long int, tipos inteiros estendidos opcionais, um tipo de dados booleano explícito e um tipo complexo para representar números complexos
  • matrizes de comprimento variável
  • suporte para comentários de uma linha começando com //, como em BCPL ou C++
  • novas funções de biblioteca, como snprintf
  • novos arquivos de cabeçalho, como stdbool.h e inttypes.h
  • funções matemáticas genéricas de tipo (tgmath.h)
  • suporte aprimorado para ponto flutuante IEEE
  • inicializadores designados
  • literais compostos
  • suporte para macros variáveis ​​(macros de aridade variável)
  • restringir a qualificação para permitir uma otimização de código mais agressiva

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

Um passeio pelo C99

se você compilar em C mude

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

para

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

Você também pode compilar com o conjunto de switches C99.Coloque -std=c99 na linha de compilação:

gcc -std=c99 foo.c -o foo

REFERÊNCIA: http://cplusplus.syntaxerrors.info/index.php?title='for'_loop_initial_declaration_used_outside_C99_mode

Eu tive o mesmo problema e funciona, basta declarar o i fora do loop:

int i;

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

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

}

Para qualquer pessoa que tente compilar código de uma fonte externa que usa um utilitário de construção automatizado, como Fazer, para evitar ter que rastrear as chamadas de compilação explícitas do gcc, você pode definir uma variável de ambiente.Digite no prompt de comando ou coloque .bashrc (ou .bash_profile no Mac):

export CFLAGS="-std=c99"

Observe que uma solução semelhante se aplica se você se deparar com um cenário semelhante com compilação C++ que requer C++ 11, você pode usar:

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

Para criador Qt:basta adicionar as próximas linhas ao arquivo *.pro ...

QMAKE_CFLAGS_DEBUG = \
    -std=gnu99

QMAKE_CFLAGS_RELEASE = \
    -std=gnu99

Jihene Stambouli respondeu à pergunta do OP mais diretamente...A pergunta era;porque

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

produzir o erro;

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

para o qual a resposta é

for(int i = low...

deveria estar

int i;
for (i=low...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top