c++ - 使 MSVC 编译器 GCC 兼容?

标签 c++ c visual-studio gcc compiler-construction

有没有办法让 msvc 编译器和 gcc 一样严格? MSVC 允许我做一些非常疯狂的事情,当我在 Linux 中编译时会导致数百个错误。

谢谢

最佳答案

一个更好的问题是:MSVC、g++ 或任何其他编译器是否符合标准,如果是,是否符合相同的标准版本?您不应该依赖一组通用的非标准行为。就个人而言,我负责在 g++ 4.1.x 和 VC7.1 上编译的超过 500KLOC 的 C++。两个编译器可以有很多让步。

两个编译器都有语言或库扩展。 g++ 倾向于将库扩展放在单独的命名空间中。 VC,至少是旧版本,不太好。两者都有默认启用的语言扩展,或者可以使用编译器开关启用(或禁用)。您最好禁用所有语言扩展。

您可以为每个编译器设置的警告级别越高越好 - 不要无缘无故地忽视来自任一编译器的警告。

对于 Windows,默认情况下我使用以下选项:/W3/wd4355/wd4805/wd4710。我想使用 /W4,但是第 3 方库使这个级别难以忍受。 对于 g++,我使用 -Wall -Wextra。我也想使用 -Wold-style-cast,但我依赖太多违反此规则的第 3 方库。

每个编译器针对不同的构造发出警告,或者以不同的方式警告它们。您最好注意两个编译器的输出,并找到它们之间产生零警告的代码子集,警告级别尽可能高。

关于c++ - 使 MSVC 编译器 GCC 兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3663599/

相关文章:

android - 在 JNI 中将 double 科学记数法转换为十进制记数法

c - C 语言的套接字编程 - Web 服务器

c++ - 为什么添加代码会破坏正在运行的功能,即使它没有被执行?

c++ - 管道输出后出现 ^@ 符号 (C++)

c++ - 如何用Eclipse CDT开发QT项目?

c++ - 这个指针操作函数的解释

我可以使用 regex_t 进行多次编译吗

visual-studio - 防止 Visual Studio 在抛出异常时崩溃

c++ - 构造函数初始化列表和静态成员(私有(private)与 protected )

asp.net - Web.Debug.config 不会将连接字符串转换为 MVC 5 项目中的 Web.config