如何更改Linux以C99模式编译?

如何更改Linux以C99模式编译?,c,C,我需要将编译模式更改为C99,有什么方法可以做到这一点吗 我使用的是vim,所以它根本就不是和IDE。我假设您使用的是gcc。使用-std=c99标志。任何符合POSIX标准的系统都应该有一个名为c99的编译器前端。在linux上,这通常只是一个包装器,它将必要的选项设置为gcc 如果您必须将它传递给make,您可以在命令行上给它CC=c99。或者,您也可以只在bashrc(或等效程序)中添加一行 我不确定如何从vim编译C代码,但无论如何,您需要创建一个make文件并执行它来编译。您需要指定C

我需要将编译模式更改为C99,有什么方法可以做到这一点吗


我使用的是vim,所以它根本就不是和IDE。

我假设您使用的是gcc。使用
-std=c99
标志。

任何符合POSIX标准的系统都应该有一个名为
c99
的编译器前端。在linux上,这通常只是一个包装器,它将必要的选项设置为
gcc

如果您必须将它传递给
make
,您可以在命令行上给它
CC=c99
。或者,您也可以只在bashrc(或等效程序)中添加一行


我不确定如何从vim编译C代码,但无论如何,您需要创建一个make文件并执行它来编译。您需要指定C99开关,但是请注意,它没有在GCC中完全实现

请注意,该标准尚未制定 全力支持;看见 更多信息

如果您还没有,我提供了一个用于C homeworks的通用make文件:

# ------------------------------------------------
# Generic Makefile
#
# Author: Yanick Rochon
# Date  : 2010-11-05
#
# Changelog :
#   0.01 - first version
# ------------------------------------------------

# project name (generate executable with this name)
TARGET   = <executable name here>

CC       = gcc -c
# compiling flags here
CFLAGS   = -std=c99 -Wall -I.

LINKER   = gcc -o
# linking flags here
LFLAGS   = -std=c99 -Wall

SOURCES  := $(wildcard *.c)
INCLUDES := $(wildcard *.h)
OBJECTS  := $(SOURCES:.c=*.o)
rm       = rm -f

$(TARGET): obj
    @$(LINKER) $(TARGET) $(LFLAGS) $(OBJECTS)
    @echo "Linking complete!"

obj: $(SOURCES) $(INCLUDES)
    @$(CC) $(CFLAGS) $(SOURCES)
    @echo "Compilation complete!"

clean:
    @$(rm) $(TARGET) $(OBJECTS)
    @echo "Cleanup complete!"
#------------------------------------------------
#通用生成文件
#
#作者:Yanick Rochon
#日期:2010-11-05
#
#更改日志:
#0.01-第一版
# ------------------------------------------------
#项目名称(使用此名称生成可执行文件)
目标=
CC=gcc-c
#在这里编译标志
CFLAGS=-std=c99-Wall-I。
链接器=gcc-o
#链接标志在这里
LFLAGS=-std=c99-墙壁
来源:=$(通配符*.c)
包括:=$(通配符*.h)
对象:=$(源:.c=*.o)
rm=rm-f
美元(目标):obj
@$(链接器)$(目标)$(LFLAGS)$(对象)
@echo“链接完成!”
obj:$(来源)$(包括)
@$(CC)$(CFLAGS)$(来源)
@echo“编译完成!”
清洁:
@$(rm)$(目标)$(对象)
@echo“清理完成!”
**编辑**


我通常使用GEdit编辑我的C源代码,并打开一个终端(或者使用GEdit的终端插件)进行编译(使用make)。您也可以使用成熟的IDE编辑源代码,如SharpDevelop或Anjuta,但我发现GEdit和terminal是我更喜欢的C开发工具。原因之一是我实际上必须自己(大部分)完成所有工作,所以我知道发生了什么:)用Vim代替GEdit也可以实现同样的效果。

Vim不是C编译器;你需要一个C编译器来编译C代码是的,是的,我知道。。。。有些ppl可能会告诉我从IDE开始更改它。重点是你需要指定你使用的编译器,而不是你使用的IDE。@XMasterrrr,如果你打开一个终端,键入
gcc--version
并粘贴输出gcc(Ubuntu/Linaro 4.4.4-14ubuntu5)4.4.5没有该标志,没有其他方法可以获得c99?@Xmasterr您希望如何获得它?@Xmasterr:您能更准确地描述一下如何编译代码吗?@Lucas为什么默认情况下不使用c99模式编译?我在linux上使用gcc(fedora)是的,它可以工作,但每次打开新的terminal@XMasterrrr,这取决于您的设置。您必须更改并将其写入shell的相应配置文件中。然后可能会注销并重新连接以使其生效。我应该在某个时候完全阅读POSIX。我不知道:)所以我可以使用这个makefile,因为它是我的原始文件?只需将它放在.c文件所在的位置,然后键入
make
进行编译。但是请注意,这个makefile并不编译子目录中的源代码
# ------------------------------------------------
# Generic Makefile
#
# Author: Yanick Rochon
# Date  : 2010-11-05
#
# Changelog :
#   0.01 - first version
# ------------------------------------------------

# project name (generate executable with this name)
TARGET   = <executable name here>

CC       = gcc -c
# compiling flags here
CFLAGS   = -std=c99 -Wall -I.

LINKER   = gcc -o
# linking flags here
LFLAGS   = -std=c99 -Wall

SOURCES  := $(wildcard *.c)
INCLUDES := $(wildcard *.h)
OBJECTS  := $(SOURCES:.c=*.o)
rm       = rm -f

$(TARGET): obj
    @$(LINKER) $(TARGET) $(LFLAGS) $(OBJECTS)
    @echo "Linking complete!"

obj: $(SOURCES) $(INCLUDES)
    @$(CC) $(CFLAGS) $(SOURCES)
    @echo "Compilation complete!"

clean:
    @$(rm) $(TARGET) $(OBJECTS)
    @echo "Cleanup complete!"