有没有办法让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
,但我依赖了太多违反此规定的第三方库。每个编译器都会对不同的构造发出警告,或者以不同的方式发出警告。您最好注意两个编译器的输出,并找到它们之间产生零警告的代码子集,其警告级别尽可能高。
假设您使用的是相对最新的版本(MSVC 2008 SP1)并且受到编译器错误的困扰,我建议如下:
您的程序的入口点称为
main
_tmain
或 WinMain
/W4:将警告视为错误_
char
wchar_t