当前位置:C++技术网 > 资讯 > 工作日记:VS出现无法转换COFF错误和循环中局部变量优化问题

工作日记:VS出现无法转换COFF错误和循环中局部变量优化问题

更新时间:2015-06-25 15:08:55浏览次数:1+次

    2013年9月13日  星期 五  晴

    WIP项目进度甘特图花了两天,才完全按要求交付了。首先是将原有的甘特图按照功能模块进行分类,然后进行整合。周二一下午整理出来。周三经理说直接做成project版的甘特图。本来是等陈玉成对内容满意后再改成project版的,经理说他们是国企,讲究的是包装,不太在乎内容,叫我包装好看点就行了。我就直接将excel形式的甘特图转换成了project的,周三上午做了大部分,中午就赶紧将其完成,完成后就发给了陈玉成,然后才午休,当然午休时间自然延长,保证两个小时。在工作间午休,可以多睡半个小时,这样可以保证充足的睡眠,下午就有精神。下午陈玉成说project里面有两个小问题,然后我就修改后立马发给他了。就这样,周四我还在等,看他有没有问题提出来,结果一天都没有,说明通过了。
    昨天从文档转回代码编写,稍有不适,没进入状态,然后慢慢调整,安装了VS2012,上午就安装了这个,一切都弄完,试用了一下,可以正常使用。下午上班,开始用VS2010来继续开发,结果调试一下之后,出现LINK:无法转换COFF,文件被破坏或者不存在的提示。结果新建项目后还是同样的问题,在网上找了好半天,也没解决问题,最后有一个网友说是安装两个版本的VS引起这个问题,说安装VS2010SP1包就可以让VS2010和VS2012都可以正常运行,搞了两个小时,安装好了,重启后可以正常使用了。然后就开始编程了。主要就是将数据库查询的代码进行优化,每个部分进行函数封装,以便后期进行动态链接库的封装。函数写的差不多,但是在使用还是有些小问题。
    期间,问了朱念一个问题:循环中的变量声明会不会声明很多次?他说,循环中声明的变量属于局部变量,循环每次结束变量都会被销毁,然后再声明。而我用程序验证时发现,后面的循环可以记录原先变量的值,我就在猜想,可能是变量没被销毁,所以下次可以得到累加的值。可是声明又怎么解释,难道循环里的声明从第二次后就视而不见了吗?循环里的变量的作用域到底是哪一部分?循环是否是退出花括号的范围再进入花括号的范围,而不是在花括号内打转?
    用程序证明,在循环内声明对象,构造时提示,析构时提示,证明了循环每次是出了花括号的,也就是局部变量都产生和销毁了。局部变量的作用域只在花括号内。但是对于局部变量的声明,编译器进行了自动优化,认为其值的作用,因而每次循环后将局部变量值记录下来,下次循环声明变量时用这个值初始化。就是这个优化,产生了错觉。要是不问朱念,这一块可能还不知道这回事呢。