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