使MSVC编译器符合GCC标准?

时间:2010-09-07 23:59:39

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

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

由于

3 个答案:

答案 0 :(得分:5)

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

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

您可以设置的每个编译器的警告级别越高越好 - 并且在没有合理理由的情况下不要忽略任何编译器的警告。

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

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

答案 1 :(得分:2)

要开始使用,我们需要您所使用的版本(针对MSVC),您遇到的错误类型(编译时间,链接时间或运行时间)等等。

假设您使用的是相对最新版本(MSVC 2008 SP1)并且因编译器错误而受到影响,我建议如下:

  • 您的计划的入口点名为main,而不是_tmainWinMain
  • / W4:将警告视为错误
  • 删除以_开头的所有功能 - 它们是特定于实现的
  • 没有Win32 API
  • 没有特定于平台的线程
  • 检查您是否对char
  • 有相同的签名
  • 这两个实现如何处理wchar_t
  • 没有安全异常处理或内联汇编魔法
  • 没有COM / MFC

答案 2 :(得分:2)

/Za (Disable Language Extensions)选项会停用许多特定于Microsoft的keywordsextensions

相关问题