Gcc 编译错误选项-std=c99或-std=gnu99

Gcc 编译错误选项-std=c99或-std=gnu99,gcc,makefile,Gcc,Makefile,我从C语言开始,我试图编译我的程序,但我有这个错误 错误:仅在C99模式下允许“for”循环初始声明 我想在我的Makefile中包含选项-std=c99,但我不知道放在哪里 # Compilatore CC=gcc CFLAGS=-W -g -Wall $(OPTLEVEL) BINFOLDER=./bin SRCFOLDER=./src OBJFOLDER=./obj all: test test: $(OBJFOLDER)/tas-data.o $(OBJFOLDER)/tas-fct

我从C语言开始,我试图编译我的程序,但我有这个错误

错误:仅在C99模式下允许“for”循环初始声明

我想在我的Makefile中包含选项
-std=c99
,但我不知道放在哪里

# Compilatore
CC=gcc
CFLAGS=-W -g -Wall $(OPTLEVEL)
BINFOLDER=./bin
SRCFOLDER=./src
OBJFOLDER=./obj

all: test

test: $(OBJFOLDER)/tas-data.o $(OBJFOLDER)/tas-fct.o $(OBJFOLDER)/tas-io.o $(OBJFOLDER)/tas-main.o
    $(CC) -o $(BINFOLDER)/tas-main  $(OBJFOLDER)/tas-data.o $(OBJFOLDER)/tas-fct.o $(OBJFOLDER)/tas-io.o $(OBJFOLDER)/tas-main.o

$(OBJFOLDER)/tas-main.o: $(SRCFOLDER)/tas-main.c $(SRCFOLDER)/tas-io.h  $(SRCFOLDER)/tas-fct.h $(SRCFOLDER)/tas-data.h
    $(CC) -o $(OBJFOLDER)/tas-main.o  -c $(SRCFOLDER)/tas-main.c

$(OBJFOLDER)/tas-data.o: $(SRCFOLDER)/tas-data.c $(SRCFOLDER)/tas-data.h
    $(CC) -o $(OBJFOLDER)/tas-data.o  -c $(SRCFOLDER)/tas-data.c 

$(OBJFOLDER)/tas-fct.o: $(SRCFOLDER)/tas-fct.c $(SRCFOLDER)/tas-fct.h $(SRCFOLDER)/tas-data.h
    $(CC) -o $(OBJFOLDER)/tas-fct.o -c $(SRCFOLDER)/tas-fct.c

$(OBJFOLDER)/tas-io.o: $(SRCFOLDER)/tas-io.c $(SRCFOLDER)/tas-io.h $(SRCFOLDER)/tas-data.h
    $(CC) -o $(OBJFOLDER)/tas-io.o  -c $(SRCFOLDER)/tas-io.c

clean:
    rm -f $(BINFOLDER)/tas-main $(OBJFOLDER)/*.o

cleanall: clean
    rm -rf $(BINFOLDER)/*

您应该将其放在为编译提供的标志/选项中。由于在
CFLAGS
中插入了其他选项,您可以将此选项放在
CFLAGS

CFLAGS=-W -g -std=c99 -Wall $(OPTLEVEL)
在Makefile中的编译命令中使用
CFLAGS
,如下所示:

$(CC) $(CFLAGS)-o $(OBJFOLDER)/tas-main.o  -c $(SRCFOLDER)/tas-main.c
编辑

您必须以以下方式修改Makefile:

# Compilatore
CC=gcc
CFLAGS=-Wextra -g -std=c99 -Wall $(OPTLEVEL)
BINFOLDER=./bin
SRCFOLDER=./src
OBJFOLDER=./obj

all: test

test: $(OBJFOLDER)/tas-data.o $(OBJFOLDER)/tas-fct.o $(OBJFOLDER)/tas-io.o $(OBJFOLDER)/tas-main.o
    $(CC) $(CFLAGS) -o $(BINFOLDER)/tas-main  $(OBJFOLDER)/tas-data.o $(OBJFOLDER)/tas-fct.o $(OBJFOLDER)/tas-io.o $(OBJFOLDER)/tas-main.o

$(OBJFOLDER)/tas-main.o: $(SRCFOLDER)/tas-main.c $(SRCFOLDER)/tas-io.h  $(SRCFOLDER)/tas-fct.h $(SRCFOLDER)/tas-data.h
    $(CC) $(CFLAGS) -o $(OBJFOLDER)/tas-main.o  -c $(SRCFOLDER)/tas-main.c

$(OBJFOLDER)/tas-data.o: $(SRCFOLDER)/tas-data.c $(SRCFOLDER)/tas-data.h
    $(CC) $(CFLAGS) -o $(OBJFOLDER)/tas-data.o  -c $(SRCFOLDER)/tas-data.c 

$(OBJFOLDER)/tas-fct.o: $(SRCFOLDER)/tas-fct.c $(SRCFOLDER)/tas-fct.h $(SRCFOLDER)/tas-data.h
    $(CC) $(CFLAGS) -o $(OBJFOLDER)/tas-fct.o -c $(SRCFOLDER)/tas-fct.c

$(OBJFOLDER)/tas-io.o: $(SRCFOLDER)/tas-io.c $(SRCFOLDER)/tas-io.h $(SRCFOLDER)/tas-data.h
    $(CC) $(CFLAGS) -o $(OBJFOLDER)/tas-io.o  -c $(SRCFOLDER)/tas-io.c

clean:
    rm -f $(BINFOLDER)/tas-main $(OBJFOLDER)/*.o

cleanall: clean
    rm -rf $(BINFOLDER)/*

CFLAGS
似乎是个好地方。@Michael,除了CFLAGS坐在那里没有使用之外。需要将其添加到规则中。感谢您的回答,我在适当的位置添加了选项-std=c99,但我仍然有相同的错误Michael和@n.m.对您的问题的评论足以回答您的问题。@Roxanne,您需要在使用
$CC
的每一行中添加
$(CFLAGS)
。这样,这些编译器选项将被传递到编译器可执行文件。请编辑您的makefile以添加
$(CFLAGS)
,无论您在哪里使用
$(CC)
。请检查我的答案,我已经包括了一个例子。
-W
不推荐使用<代码>-Wextra新版本是否将其写入测试行<代码>$(CC)$(CFLAGS)-o$(OBJFOLDER)/test