zoukankan      html  css  js  c++  java
  • 当Visual Studio中的注释也会生产代码时……

    今天在VS2008中发现了超级令人抓狂的问题,经试验发现在VS2010中有同样的问题存在。

    重现问题——

    在VS2008中新建C++的“win32控制台应用程序”项目,并添加对MFC类库的引用。

    在_tmain函数前加上如图所示的注释,然后在主函数中随便写上几句代码,并设置断点,整个代码如图。

    最后在debug模式下,按F5运行,结果,程度在第二个断点处没有停住,而是直接运行过去!!

    经过反复的试验——包括删除ncb文件,重启VS,重启电脑……忽然想到《Exceptional C++ Style》中有提到注释可能对代码产生影响,比如 “//?” 会被转换成 “\”,结果使第二行代码失效了!!

    难道这里也是因为注释的问题?于是将_tmain()前的注释去掉后,果然,断点的功能居然又回来了!!

     注释掉的代码也会对程序的调试产生影响!!为了弄明白这个问题,本人接下来查看了其生成的汇编代码——即程序运行到第一个断点处时,调出反汇编窗口,如图

    明明是好好的一段注释代码,但微软的VS编译器,硬是在其中加了一堆代码。本人现在才开始学win32下的汇编,只知道ebp,esp是用在函数调用时传递参数用的。

    在已经被注释掉的代码却生成了目标代码,虽然没有对程序的结果造成直接影响(该执行的地方都正常运行了,上面的程序可以正常输出1),但不能在调试时查看断点,最令人揪心的是不知这些多余的代码何时会产生更大的影响。并且发现对已经注释掉的结构体里的内容进行修改后(比如添加或减少几个字段的申明),也会影响代码的生成……

    当本人花了几个小时找出这个问题后,心情依然沉重,结果是现在不敢在VC++中使用 // 风格的注释了(上面的注释掉成/* */后就没问题),并且尝试了其它可能出现问题的情况。

    最后,自己重新建立项目,并且所有的代码都自己敲上去,发现一切OK。原来~~原来,上面那段注释过的代码是同事用QQ发给我的!!!!而QQ对话框中的换行和VS中的转行编码不一样,于是就出现了上面这种注释掉的代码会对程序产生影响的情况~~   QQ~~

  • 相关阅读:
    pta-L2-032 彩虹瓶 (25 分)
    pat-L2-019 悄悄关注
    谷歌与Airbnb的JS代码规范
    无阻塞加载脚本----性能优化(二)
    web开发者性能优化工具(一)
    threeJS创建mesh,创建平面,设置mesh的平移,旋转、缩放、自传、透明度、拉伸
    攻防世界-web-高手进阶区011-Web_python_template_injection
    攻防世界-web-高手进阶区010-upload1
    攻防世界-web-高手进阶区009-unserialize3
    攻防世界-web-高手进阶区008-PHP2
  • 原文地址:https://www.cnblogs.com/xiangism/p/2290281.html
Copyright © 2011-2022 走看看