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
设置,并使用c89
, c99
或c11
– 而对于C ++使用c++03
或c++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是您的选择。