在GCC中设置std=c99标志

73

我想知道是否有任何文件可以设置-std=c99标志,这样我就不必为每次编译都设置它。 我在Ubuntu上使用的是GCC 4.4。

3个回答

114

不要调用/usr/bin/gcc,而是使用/usr/bin/c99。这是调用C99编译器的Single-Unix-approved方式。在Ubuntu系统上,这将指向一个脚本,该脚本在添加了-std=c99标志后调用gcc,这正是你想要的。


我是Linux编程的新手(在学校学习),如何使用/usr/bin/c99?我正在使用带有C插件的Vim-Gnome,只需执行\rr即可编译和运行。 - Fatmarik
2
从我在网上找到的信息来看,有一个名为C_CCompiler的全局变量指定了C编译器。它通常设置为gcc。将其内容替换为c99,一切都应该正常运行。请参阅帮助文件:http://lug.fh-swf.de/vim/vim-doc/csupport.html。 - Thomas Pornin
1
请注意,在Mac上使用c99可能会给您带来意想不到的结果:https://dev59.com/QVHTa4cB1Zd3GeqPVeS8 - dubiousjim

19

你觉得使用 alias gcc99= gcc -std=c99 怎么样?


5
+1 这就是我所做的。而且,在你添加别名时,加上 -Wall 和 -pedantic 标志。 - anon
5
现在这就是我的别名的实际样子:alias gcc99=gcc -Wall -pedantic -ansi -std=c99。没错,还带有ansi - dirkgently
5
如果使用-std=c99 -ansi,GCC遵循哪个标准(如果有的话)?你已经启用了C99,然后禁用了C89中不存在的任何内容,这是否会导致两者的公共子集? - Steve Jessop
2
我确实读过那篇文章,但它只告诉我GCC做了什么,而没有告诉我它为什么有用。特别是,-ansi -std=c99 -pedantic相对于-std=c89 -pedantic来说有什么优势和原因? - Steve Jessop
4
顺序确实很重要。例如,在代码 int main() { // thing <newline> } 中,其中 <newline> 表示换行符。使用命令 gcc -ansi -std=c99 -pedantic 可以编译通过,但使用命令 gcc -std=c99 -ansi -pedantic 无法编译通过。 - Steve Jessop
显示剩余6条评论

1
export CFLAGS="-std=c99"
export CC="gcc"

make 

一些发行版和大多数基于UNIX的操作系统都有这些东西的别名或包装器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接