如果你是一位老资格的 Visual C++ 用户,那一定会对 Visual C++ 的 fatal error C1001 不会陌生。如果你在用 VC6 编一个规模较大的工程,如果你在用 VC6 编译一个用到了模板的工程,那恭喜你,这个错误会时不时冒地出来和你打招呼,搞得你手足无措。
详细的出错信息如下:
fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 1794)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information Error executing cl.exe.
网上已经有其他人写的解决方法了,不过貌似都很麻烦,而且还有副作用(例如有一种是要求把预编译头选项关闭,那会导致整个工程的编译如同老牛拉车)。而官方的针对此问题的描述在这里:http://support.microsoft.com/?scid=kb%3Ben-us%3B305980&x=14&y=12 ,不过,按照微软一贯的风格,按照它的指导去解决问题,可能需要具有无比的运气。
经过老汉本人多次验证,在 VC6 中可以用如下方法解决:在出错信息中找到出错时正在编译的那个 cpp 文件的名字,把它记下来;在 FileView 窗口中的 source files 下新建一个子文件夹,把刚才记住的 cpp 文件移动到这个文件夹中;然后再次编译。(顺便说一下,这其实是改变了工程中 cpp 文件的编译顺序)可以很负责任的说,老汉自己验证的成功率在 99% 以上。
这个技术本来是专门针对于 VC6 的,因为从 VS2003 开始,老汉几乎再也没有遇到过这个问题,所以也就一直没有共享出来。可惜历史总是会重演,刚才一个在玩儿 VS2005 的兄弟竟然在摸死你上和我说编译器报以下错误: fatal error C1001: 编译器中发生内部错误。(他的是中文版,英文版的错误信息似乎应该是:fatal error C1001: An internal error has occurred in the compiler.) 老汉一眼就看出了这绝对是前述问题借尸还魂了,所以把秘籍告诉了他,一次搞定!唯一需要注意的就是,VS2005 里,FileView 已经变成了 Solution Explorer(中文是“解决方案管理器”),而 New Folder 菜单项也变成了“Add->New Filter”(中文可能是“添加->新筛选器”)。仅此而已。
祝遇到这个问题的兄弟好运,能搜到我的这篇文章。