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

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

-march=native -O3 -std=gnu99 

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

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

关于C, Visual Studio 直到最近才完全不支持C99 。

关于gcc你可以找到详细的详细文章,说明它们支持的标准以及所涉及的角落和缝隙。 他们还有一个很好的扩展列表,他们支持。 您需要对gcc和扩展一点小心,因为只指定要使用哪个标准不足以在使用扩展时生成警告或错误。 例如,您可能会惊讶于使用:

 gcc -std=c90 -W -Wall 

允许您在没有警告的情况下使用可变长度数组 。 为了生成警告,您需要添加-pedantic

 gcc -std=c90 -W -Wall -pedantic 

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

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

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

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

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

gcc支持大多数C99function,详细信息请参阅GCC中C99function的状态 。

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