none
有时候C++编译器会遗漏编译的语句 RRS feed

  • 问题

  • 在没有任何优化的情况下,会出现编译出来的代码和C++语句不符的状况。在这种情况下,只要添加一些分号或者是添加些无用的语句(比如:int aaa = 0; aaa++;之类的)就会编译正常了。不知道大家有没有碰到这种问题。
    2009年7月28日 5:58

答案

  • 在没有任何优化的情况下,会出现编译出来的代码和C++语句不符的状况。在这种情况下,只要添加一些分号或者是添加些无用的语句(比如:int aaa = 0; aaa++;之类的)就会编译正常了。不知道大家有没有碰到这种问题。

    会出现编译出来的代码和C++语句不符的状况...

    出现这种情况肯定是不能完全正确调试的,你必须重新编译代码.因为你的调试信息的PDB文件只有再编译的时候才会重新生成.
    就是PDB文件的问题.
    当你加上一条无用代码后,IDE会自动帮你重新编译并生成新的PDB文件,当然调试就可以断到那里了.
    0xBAADF00D
    • 已标记为答案 Tim Li 2009年8月4日 9:21
    2009年7月31日 10:58
    版主

全部回复

  • 编译器会对标准为定义的内容进行优化。况且编译器并不完全符合标准。


    麻烦把正确答案设为解答。
    2009年7月28日 9:15
    版主
  • 不优化的情况下一般是不会出现这种情况的.

    你可以把代码贴出来,可能是你代码的BUG.

    编译器很多人都在用,一般是不会出这么严重的BUG的.
    0xBAADF00D
    2009年7月28日 16:05
    版主
  • 我认为存在两种可能:
    1. 是调试器在加载符号时存在bug。
    2. 编译器在生成调试信息时存在问题。
    2009年7月31日 3:29
  • 在没有任何优化的情况下,会出现编译出来的代码和C++语句不符的状况。在这种情况下,只要添加一些分号或者是添加些无用的语句(比如:int aaa = 0; aaa++;之类的)就会编译正常了。不知道大家有没有碰到这种问题。

    会出现编译出来的代码和C++语句不符的状况...

    出现这种情况肯定是不能完全正确调试的,你必须重新编译代码.因为你的调试信息的PDB文件只有再编译的时候才会重新生成.
    就是PDB文件的问题.
    当你加上一条无用代码后,IDE会自动帮你重新编译并生成新的PDB文件,当然调试就可以断到那里了.
    0xBAADF00D
    • 已标记为答案 Tim Li 2009年8月4日 9:21
    2009年7月31日 10:58
    版主
  • 用volatile定义变量就没事了
    2009年9月18日 9:25
  • 这个问题在当年的C++Builder上尤为严重,不过这也是10年前的版本了。现在的没试过,不过每天使用VC2008的时候,还没出现过楼主说的问题。
    2009年9月23日 1:38