我使用的是MinGW编译器的Windows。我正在用C制作一些程序。我读到的大部分关于这方面的文章似乎都过时了……我最后一次读到C99是不完整的,在GCC里面,这是真的吗?我真正的问题是设置C99和GNU99之间的跨平台兼容性。我是否应该避免使用GNU99设置和它的扩展,而只使用C99?我是这个MinGW编译器集的新手,因为我一直使用Visual,并且决定尝试一些新的.现在我正在用这些设置编译..。
-march=native -O3 -std=gnu99在使用这个编译器制作C程序和C++程序时,我是否应该输入任何建议的编译器命令?
我想制作一个与Windows、Mac和Linux兼容的简单程序,但首先要与大多数Windows兼容。
发布于 2013-07-29 01:58:00
关于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-29 01:25:01
如果您希望使用“任意”编译器进行编译,则应该避免使用gnu99设置,并使用c89、c99或c11-对于C++使用c++03或c++11 (或c++0x取决于编译器的特定版本)。这些事情进行得越晚,就越局限于“编译器的新版本”。
gnu99的意思是带有"GNU扩展“的C99,这意味着使用此设置编译的代码可能不会在其他编译器上编译。
您也应该应用-Wall,我也喜欢使用-Wextra -Werror。-Wall意味着启用(几乎)所有警告,-Wextra表示启用超出-Wall中警告的额外警告,-Werror意味着在获得任何代码之前必须修复任何警告(“将警告视为错误”)。
发布于 2013-07-29 01:24:04
大多数C99特性都得到gcc的支持,详见GCC的C99特写现状。
一些GNU扩展很容易使用。是否在C99和GNU99之间进行选择取决于您是否要使用其他编译器。但是,如果您正在考虑Visual,它不支持C99,因此,如果以后要返回Visual,那么坚持使用C89是一种选择。
https://stackoverflow.com/questions/17914701
复制相似问题