首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows的MinGW编译器,使用GCC,C99和GNU99

Windows的MinGW编译器,使用GCC,C99和GNU99
EN

Stack Overflow用户
提问于 2013-07-29 01:17:41
回答 3查看 4.5K关注 0票数 3

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

代码语言:javascript
复制
-march=native -O3 -std=gnu99

在使用这个编译器制作C程序和C++程序时,我是否应该输入任何建议的编译器命令?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-29 01:58:00

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

关于gcc,您可以找到一个详细的详细记录,它们所支持的标准以及所涉及的角落和漏洞。他们还支持一个不错的扩展列表。您需要对gcc和扩展稍微小心一点,因为仅仅指定要使用哪个标准并不足以在使用扩展时生成警告或错误。例如,您可能会惊讶地使用:

代码语言:javascript
复制
gcc -std=c90 -W -Wall

允许您使用变长阵列而无需警告。为了生成警告,您需要添加-pedantic

代码语言:javascript
复制
gcc -std=c90 -W -Wall -pedantic

然后,这将生成一个类似于以下内容的警告:

代码语言:javascript
复制
warning: ISO C90 forbids variable length array ‘array’ [-Wvla]
票数 1
EN

Stack Overflow用户

发布于 2013-07-29 01:25:01

如果您希望使用“任意”编译器进行编译,则应该避免使用gnu99设置,并使用c89c99c11-对于C++使用c++03c++11 (或c++0x取决于编译器的特定版本)。这些事情进行得越晚,就越局限于“编译器的新版本”。

gnu99的意思是带有"GNU扩展“的C99,这意味着使用此设置编译的代码可能不会在其他编译器上编译。

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

票数 3
EN

Stack Overflow用户

发布于 2013-07-29 01:24:04

大多数C99特性都得到gcc的支持,详见GCC的C99特写现状

一些GNU扩展很容易使用。是否在C99和GNU99之间进行选择取决于您是否要使用其他编译器。但是,如果您正在考虑Visual,它不支持C99,因此,如果以后要返回Visual,那么坚持使用C89是一种选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17914701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档