小弟使用的是VC6.0,有一个很小的编译问题不理解
对一个原本正确的程序,加上一个不是严重错误的语句,再编译的时候会提出警告。(比如加上一个使用未初始化变量的语句就会出现类似这样的错误:
warning C4700: local variable 'n' used without having been initialized)这本是应该的,但是当我把这句话注释掉再重新编译的时候为什么还提出同样的警告呢?而再继续编译一遍就不再提错了。
这是为什么呢?为什么注释掉之后的第一次编译还会警告?

解决方案 »

  1.   

    你肯定还在其在其它地方用到它才会出warning
    再次编译不出警告是因为本文件没有作过修改,不再重新编译,当然不出警告了
      

  2.   

    你的变量没有初始化,但是却使用了变量里面的值。第二遍编译不出现这样的警告,
    是因为你的源文件不再被编译,因为有警告的源文件,只要没有错误,就不会被再次编译,
    再次编译的时候,只会利用它生成的obj进行link.============================================================================
    http://www.betajin.com/alphasun/index.htm           给我发信息请附带原帖地址
    http://alphasun.18en.com/                    http://shakingtoolkit.9126.com/
    DocWizard C++程序文档自动生成工具 | Wave OpenGL | HttpProxy | AjaxParser词法分析
      

  3.   

    1) 为了加快编译的速度,编译器对已经通过编译的代码不再编译,而是直接调用目标文件来连接。
    有错误的代码是不能通过编译的,所以Error信息每次都会出来,而且有了Error信息,是不会产生连接结果的。而Warning信息一般可以通过编译,可以产生连接结果。
    2) 对于Warning信息,你不去处理,编译器才不管你呢,谁叫你不管的。
    我也没有学过编译原理,但是这个好像只是编译器实现的细节,不是原理性的东西,自己体会吧。
      

  4.   

    编译器在编译的时候会把需要编译的源文件和相应的obj文件比较修改时间,若发现源文件没有更新过,就不再对这个源文件重新编译,也就不会再出现警告信息。
    不把警告信息保留下来是有道理的,因为warning不是error,不一定会产生错误,而且用户不立马修改它,编译器便可以认为这些warnging不是很重要,老是列出来反而会让人觉得不方便,毕竟从一堆信息里找需要的信息是很麻烦的。