[英]Making MSVC compiler GCC complient?
有没有办法使msvc编译器像gcc一样严格? MSVC让我做一些非常疯狂的事情,当我在linux中编译时会导致数百个错误。
谢谢
一个更好的问题是:MSVC,g ++或任何其他编译器标准是否兼容,如果符合,是否符合相同的标准版本? 您不应该依赖一组共同的非标准行为。 就个人而言,我负责在g ++ 4.1.x和VC7.1上编译的超过500KLOC的C ++。 两个编译器都可以提供很多东西。
两个编译器都有语言或库扩展。 g ++往往更好地将库扩展放在一个单独的命名空间中。 VC,至少是旧版本,不太好。 两者都具有默认启用的语言扩展,或者可以使用编译器开关启用(或禁用)。 您最好禁用所有语言扩展程序。
您可以设置的每个编译器的警告级别越高越好 - 并且不会在没有正当理由的情况下忽略任何编译器的警告。
对于Windows,默认情况下我使用以下选项: /W3 /wd4355 /wd4805 /wd4710
。 我想使用/W4
,但第三方库使这个级别难以忍受。 对于g ++,我使用-Wall -Wextra
。 我也想使用-Wold-style-cast
,但我依赖太多违反这个的第三方库。
每个编译器都会警告不同的结构,或者以不同的方式警告它们。 你最好注意两个编译器的输出,并在它们之间找到产生零警告的代码子集,尽可能高的警告级别。
要开始使用,我们需要您所使用的版本(对于MSVC),您遇到的错误类型(编译时间,链接时间或运行时间)等等。
假设您使用的是相对当前版本(MSVC 2008 SP1)并且被编译错误所困扰,我建议如下:
main
而不是_tmain
或WinMain
_
开头的函数 - 它们是特定于实现的 char
有相同的签名 wchar_t
/ Za(禁用语言扩展)选项禁用许多特定于Microsoft的关键字和扩展 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.