奇怪的程序编译时间

 

        前两天外网版本和发布版本对应不上了,导致外网有大量崩溃。由于上传人员的失误,紧急补丁尽然没有pdb,没有pdb文件的话就没法调试dump文件找到问题所在。还好后来找到了以前备份的pdb,勉强找到了问题所在,确定是外网版本问题。问题找到了,一切都好办了,可是奇怪的事情发生了。

内网发布版本运行显示时间和发布时间差一天,程序发布时间是5.11日。可编译时间显示是5.10号,这就不对了。按理说这两个时间该是一样的啊,开始我也在想这个问题。没想明白,周末休息,突然想到我忽略一个问题。这个编译时间怎么来的?发布时间是通过文件修改时间确定的,这个编译时间不是系统自带的功能。看了下代码,发现原来编译时间是写在main函数里的一个c stand 宏。先看看这两个神奇的宏:

Macro  __DATE__       

DescriptionThe compilation date of the current source file. The date is a string literal of the form Mmm dd yyyy. The month name Mmm is the same as for datesgenerated by the library function asctime declared in TIME.H.

Macro  __TIME__

DescriptionThe most recent compilation time of the current source file. The time is a string literal of the form hh:mm:ss.      

原来这两个宏记录的是当前文件编译的时间,注意是当前文件而不是当前工程。这就知道原因了,由于当时打紧急补丁,我修改完程序后,没有rebuild。所以main函数所在文件没有被重新编译过。自然打印出来的时间是此文件最有一次编译的时间。所以和文件修改时间对应不上了。看似很怪异的问题,真相大白后,问题还是很简单的。还有以后发布版本,或者遇到比较奇怪的问题,建议rebuild下,有时很难缠的问题可能就解决了。并不是说我在瞎试,这也是一种解决问题的途径,我们在解决问题时不一定要多高明的办法,把问题解决了就行。

       C stand有很多非常有意思并且有用的宏,比如说__FILE__,__LINE__。有兴趣的同学可以看看。最后要说的是在以后思考解决问题的时候,要多从软件整体去思考问题,站在软件整体流程和运作原理上,先总体后局部的思想。前面部分说的是对问题的描述和解决方案,后面纯属我的浅见,希望大家多多指教和交流。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值