有没有办法让msvc编译器像gcc一样严格? MSVC让我做一些非常疯狂的事情,当我在linux中编译时会导致数百个错误。
由于
答案 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
,而不是_tmain
或WinMain
_
开头的所有功能 - 它们是特定于实现的char
wchar_t
答案 2 :(得分:2)
/Za (Disable Language Extensions)选项会停用许多特定于Microsoft的keywords和extensions。