gcc永久改变c标准

时间:2014-01-18 15:22:40

标签: c gcc standards c99

有没有办法告诉gcc在编译c文件时使用c99标准作为默认值? 我想避免一直给它-std=c99参数。 我假设我可以通过在.bashrc文件中创建一个别名来做到这一点,但似乎相当不优雅。

3 个答案:

答案 0 :(得分:5)

您可以拨打c99而不是gcc(gcc的包装,如果您的系统上可用)或尝试修改您的gcc spec文件。更多信息请访问:http://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Spec-Files.html

答案 1 :(得分:2)

这是一个意想不到的答案。使用Makefile!

优点:

  • 只需输入make即可构建
  • 所有选项都在构建过程中自动处理 当你在这里时,继续并启用所有警告,这是好事。 See this
  • 轻松扩展到多个源文件
  • 可以处理涉及不同工具的多步构建

缺点:

  • 另一个学习的工具,另一个出错的方法。

考虑这个来源:

#include <stdio.h>

int main() {
    printf("Hello!\n");
    int x = 4;
    printf("%d\n", x);
    return 0;
}

你可以像这样制作一个Makefile:
(免责声明,我实际上并不知道如何写它们)

CC=gcc
CFLAGS=-Wall -pedantic -std=c99
LDFLAGS=
SOURCES=$(wildcard *.c)
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello

.PHONY: clean

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o:
    $(CC) $(CFLAGS) $< -o $@

clean:
    rm -f *.o $(EXECUTABLE)

它为我构建。

同样,如果您删除-std=c99,则它不应该是有效的C89代码,实际上,输入make会显示构建错误。

答案 2 :(得分:1)

自定义编译表明您具备编译器,标准和基本标志/选项的应用知识。因此,我建议您在.bashrc.tcshrc等中设置shell变量,并在命令行中使用它们。

由于方言的选择会对链接产生影响:CC="gcc -std=c99",因此允许您使用$CC -c -O2 ... foo.c调用单独的编译命令,并且还将其作为configure脚本的默认选项,当然,您始终可以使用configureCC="gcc -std=c90"覆盖CC="clang"脚本。这同样适用于首选CFLAGS值,例如

CFLAGS="-pipe -W -Wall -O2 -march=core2"

允许$CC $CFLAGS -c foo.c命令,默认情况下,两个环境变量都使用配置脚本,除非您明确覆盖它们。我认为这比别名更有用。但也许我已经习惯了自己的设置:)