3

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

-march=native -O3 -std=gnu99

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

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

4

3 回答 3

3

如果您想要使用“任何”编译器编译的东西,您应该避免gnu99设置,并使用c89,c99c11- 对于 C++ 使用c++03or c++11(或c++0x取决于它是哪个特定版本的编译器)。你做这些事情的时间越晚,你就越局限于“新版本的编译器”。

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

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

于 2013-07-29T01:25:01.380 回答
1

gcc 已支持大部分 C99 功能,详情请参阅GCC 中的 C99 功能状态

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

于 2013-07-29T01:24:04.320 回答
1

关于 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]
于 2013-07-29T01:58:00.217 回答