MinGW Compiler for Windows,使用GCC,C99和GNU99

时间:2013-07-29 01:17:41

标签: c++ c compiler-construction mingw c99

我正在使用适用于Windows的MinGW编译器。我在C中制作了一些程序。我读到的大部分文章似乎都已经过时了......最后我读到C99在GCC中是不完整的,这仍然是真的吗?我真正的问题是设置C99和GNU99之间的跨平台兼容性...我应该避免使用GNU99设置和它的扩展,只是坚持使用C99?我是这个MinGW编译器集的新手,因为我一直使用Visual Studio并决定尝试新的东西......现在我正在使用这些设置进行编译......

-march=native -O3 -std=gnu99

我是否应该为制作C程序以及使用此编译器制作C ++程序而输入任何推荐的编译器命令?

我想制作一个与Windows,Mac和Mac兼容的简单程序。 Linux,但首先是大多数Windows。

3 个答案:

答案 0 :(得分:3)

如果你想要用“任何”编译器编译的东西,你应该避免gnu99设置,并使用c89c99c11 - 和C ++使用c++03c++11(或c++0x,具体取决于编译器的特定版本)。你继续这些事情,你越是限制“新版本的编译器”。

gnu99表示带有“GNU扩展”的C99,这意味着使用此设置编译的代码可能无法在其他编译器上编译。

您当然也应该使用-Wall,我也希望-Wextra -Werror-Wall表示启用(几乎)所有警告,-Wextra表示启用-Wall之外的额外警告,而-Werror表示您必须在获得任何警告之前修复任何警告代码(“将警告视为错误”)。

答案 1 :(得分:1)

gcc支持大多数C99功能,有关详细信息,请参阅Status of C99 features in GCC

一些GNU扩展很方便使用。是否在C99和GNU99之间进行选择取决于您是否要使用其他编译器。但是如果您正在考虑使用Visual Studio,它不支持C99,那么如果您稍后再回到Visual Studio,那么坚持使用C89就是您的选择。

答案 2 :(得分:1)

关于C,Visual Studio until recently不支持C99 at all

关于gcc,您可以找到详细的detailed writeup,了解他们所支持的标准以及所涉及的角落和缝隙。他们也有一个很好的list of extensions他们支持。您需要对gcc和扩展名进行一些小心,因为仅指定要使用的标准不足以在使用扩展时生成警告或错误。例如,您可能会惊讶于使用:

gcc -std=c90 -W -Wall

允许您在没有警告的情况下使用variable length arrays。要生成警告,您需要添加-pedantic

gcc -std=c90 -W -Wall -pedantic

然后这将产生类似于此的警告:

warning: ISO C90 forbids variable length array ‘array’ [-Wvla]