回答
要开始我们就需要你在(为MSVC)的版本,你打什么样的错误(编译时,链接时或运行时)等。
假设你是一个相对较新的版本(MSVC 2008 SP1)和编译器错误被窃听,我建议如下:
- 你的程序的入口点
main
而不是_tmain
或WinMain
- /W4:警告视为错误
- 删除所有以
_
开头的功能 - 它们是具体的实施 - 没有的Win32 API要么
- 没有特定于平台的线程
- 检查,如果你有
char
- 相同的符号性如何做这两种实现治疗
wchar_t
- 没有安全的异常处理或内联汇编魔法
- 没有COM/MFC要么
我的问题不是msvc中的错误,问题是msvc让太多的东西滑动,而gcc更严格 – jmasterx 2010-09-08 00:19:40
@Milo:上面的列表是可能导致悲伤的指示。没有任何来自你身边的例子,你的问题就很难回答。 – dirkgently 2010-09-08 00:23:56
一个更好的问题是: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。您可以设置几个选项,这些选项将有所帮助,但是在一天结束时,无法用两个编译器定期构建项目。我一直在使用g ++和Visual Studio每天构建相同的代码5年以上,除了std :: tr1怪癖和使用'typename'之类的东西之外,还有很少的东西可以在其中工作,另一个。便携式书写,你不应该有问题。 – 2010-09-09 08:22:28
/Za (Disable Language Extensions)选项禁用了许多特定于Microsoft的keywords和extensions。
- 1. Windows GCC和MSVC编译器之间的编译时间比较
- 2. MSVC编译器更新
- 3. MSVC++编译器错误C2892?
- 4. 编译编译器错误编译GCC
- 5. 创建(使用MSVC编译器)
- 6. Boost Spirit v2 gcc编译错误,它不显示使用msvc
- 7. 使用GCC和MSVC编译时的不同行为
- 8. MSVC内联汇编GCC的
- 9. 如何在Windows编译器和GCC编译器中使用SSE?
- 10. 错误模板偏特在编译GCC,但不是MSVC
- 11. 使gcc编译C使用gcc规则
- 12. GCC VS MSVS编译器
- 13. Android GCC编译器更改
- 14. GCC编译器问题
- 15. GNU GCC编译器更新
- 16. GCC编译器错误
- 17. 找不到gcc编译器
- 18. Eclipse Juno - GCC编译器pthread
- 19. OIS GCC编译器错误
- 20. GCC编译器错误
- 21. 旧的gcc编译器
- 22. 最小GCC C++编译器
- 23. C89 vs c99 GCC编译器
- 24. GCC编译器标志“-DEVAL”
- 25. GCC编译器的问题
- 26. MSVC和FreeGlut编译器错误
- 27. MSVC编译器行为是用来
- 28. 这是一个MSVC++编译器错误?
- 29. 将编译器从gcc切换到msvc后Qt应用程序崩溃了
- 30. Boost 1.37为MSVC预编译
@Milo - 我会密切关注这个问题。我目前正在将一个巨大的代码从MSVC移植到GNU工具链上,我感觉你很痛苦。 – 2010-09-08 00:01:39
你能提供一些例子吗?我的印象是,MSVC总是禁止许多完全有效的C语言(至少C99),因为它们不在C++中,它本质上是一个假装C是C++子集的C++编译器... – 2010-09-08 00:09:11
@R:既然他是从MSVC到Linux我不会被C99/C++ 03特定的代码困扰太多,并且GCC不支持这些代码(假设使用了最新版本的GCC)。 – dirkgently 2010-09-08 00:11:46