Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Finalizando jogo de adivinhação

No momento em que se substitui o "while" pelo "for" o código no DEVC++ dá o seguinte erro nesse trecho do código :

for(int i = 1; i <= numerodetentativas; i++) {

printf("\nTentativa %d\n", tentativas);
printf("\nChute um número:");

scanf("%d", &chute);
printf("\nSeu chute foi %d", chute);
//cada máscara deve ter um argumento, que deverá ser separado por vírgulas

O erro: 'for' loop initial declarations are only allowed in C99 or C11 mode e use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code

Não faço idéia do que isso significa.Porém ao testar no Online C Compiler, o código rodou sem problemas.

2 respostas
solução!

A linguagem C tem várias padronizações que definem as especificações que um compilador C tem de cumprir. O padrão mais antigo, o ANSI, por exemplo, obrigava que variáveis fossem declaradas apenas no início de um bloco, e proibia a declaração de uma variável dentro de um laço for. Padrões posteriores, como o ISO C99, ISO C11 e ISO C17 retiraram estas limitações. É comum também que fabricantes de compiladores extendam os recursos da linguagem adicionando funcionalidades não padronizadas.

Quando o seu compilador diz: 'for' loop initial declarations are only allowed in C99 or C11 mode o que ele quer dizer é justamente isso, você está tentando usar uma funcionalidade que o padrão usado pelo compilador não fornece. E aqui: use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code, ele lhe dá a dica de como resolver o problema. Adicione uma flag que diga ao compilador que interprete o código segundo um destes padrões nas configurações de build.

Eu não uso o DevC++, programo apenas no Linux e no Mac, e compilo os programas por meio de um Makefile. Portanto, não sei como dizer de que maneira fazê-lo em sua IDE. Um script padrão que costumo usar para compilar meus programas é similar a este:


CC=clang
CFLAGS=-Wall -O3 -std=c11

SRC=$(wildcard *.c)
OBJ=$(SRC:.c=.o)
EXE= game

all: $(EXE)

$(EXE): $(OBJ)
        $(CC) $^ -o $@ $(CFLAGS)

%.o: %.c
        $(CC) -o $@ -c $< $(CFLAGS)

clean:
        @rm *.o

remove: clean
        @rm prog.exe

Um exemplo de funcionamento é o seguinte. No terminal, altero o diretório para a raiz do projeto, onde estão os códigos-fonte e o script Makefile. Digito make, e meus arquivos são compilados:


user@domain % make
clang -o game.o -c game.c -std=c11 -Wall -O3
clang -o main.o -c main.c -std=c11 -Wall -O3
clang game.o main.o -o game -std=c11 -Wall -O3

Busque no google por:

std AND devc++ AND (c11 OR c99) AND build

Obrigada pelo retorno. Após uma pesquisada rápida no google achei a solução. Para aqueles que utilizam o DEVC++ como eu (pois uso no meu curso também) a solução foi bastante simples : Configurar o Dev C++ para usar o padrão ansi iso c99 – na barra de ferramentas do DEV C++ clique em Ferramentas -> Opções do Compilador-> Geração de Código -> Padrão da Linguagem (-std) selecione para ISO C99 e clique em Ok.