BYTE CICCard::ByteBCD(const int Num)
{
int i;
i=Num;
return BCD(i) | BCD(i) << 4;
}BYTE CICCard::BCD(int &Num)
{
int i=0;
i=Num%10;
Num/=10;
return i;
}比如我输入一个int型的数23,通过调用这两个函数,出来的结果应该是16进制数0x23,
但在release中结果却为0x32,我一直想不通。
release 似乎对变量的初始化要求比较严一些。还有如果进行位操作,会不会有什么区别?
另外,我想找出原因 ,想对release 进行调试,有什么办法可以设定,对release进行调试。
这个问题困扰我好久了。大家踊跃探讨一下吧。多给分!!!
{
int i;
i=Num;
return BCD(i) | BCD(i) << 4;
}BYTE CICCard::BCD(int &Num)
{
int i=0;
i=Num%10;
Num/=10;
return i;
}比如我输入一个int型的数23,通过调用这两个函数,出来的结果应该是16进制数0x23,
但在release中结果却为0x32,我一直想不通。
release 似乎对变量的初始化要求比较严一些。还有如果进行位操作,会不会有什么区别?
另外,我想找出原因 ,想对release 进行调试,有什么办法可以设定,对release进行调试。
这个问题困扰我好久了。大家踊跃探讨一下吧。多给分!!!
解决方案 »
- 老师的一个项目,现在想用vc在从另一个商业软件的波形图中读取测量值,谢谢~
- 请教.Net和MFC混合编程的问题?
- Release版本的程序出现"0x73d3165f指令引用0x00008034内存,该内存不能为Writtten"问题
- 使用CFtpConnection访问AIX系统的问题
- CListView中怎么响应双击CListCtrl消息?
- 请教高手电子邮件的问题!!
- error C1010 该如何解决?
- 在MFC中,View和Dialog如何通信啊?
- 怎样用UDP发送广播信息
- MFC View问题!急急急!
- Atl:已知接口,如何找到对象?
- 各位能否谈谈你们所在公司的源代码管理与备份方案?
BYTE CICCard::ByteBCD(const int Num)
{
int i;
i=Num;
BYTE bResult=BCD(i);
return bResult|BCD(i) << 4;
}
0000 0010 | 00110000 = 0011 0010
不就是 0x32 么?
{
int i;
i=Num;
//return BCD(i) | BCD(i) << 4;
/* if i = 23 then bcd(i) = 3 and bcd(i)<<4 = 3 << 4 = 48 = 0x30*/
return BCD(i/10)<<4 + BCD(i);
/* now bcd(i/10)<<4=0x20 the result is 0x23*/
}BYTE CICCard::BCD(int &Num)
{
int i = 0;
i = Num % 10;
Num /= 10;
return i;
/* if Num = 23 then i = 3 */
}
而且我的程序其它地方只要用到位操作和移位,也会出现出来的结果不是预期的结果的现象,大家能不能告诉我怎样才能避免这种情况。
各位在编程中有没有遇到我这样的情况,怎样避免,大家都谈谈自己的看法吧。
DEBUG版和RELEASE版的生成代码是不同的,你只好去调试release 版了,别怕,有点窍门:
在release版的Project settings里,把C/C++设置的debug info 设为Program database,
在link设置里选Generate debug info, 这样你就可以看着源码来调试release版,
而不用看着反汇编来调试那么辛苦。由于release版一般是优化过的,所以有时你检查变量
数值时所显示的数值不一定就是该变量当前的数值,但是程序执行顺序是不变的,如果真的
要看其准确的数值的话,用反汇编来看,也许是在某个register里。 调试完毕之后,把link
设置的generate debug info给去掉,重新link一下就行了
return BCD(i) | BCD(i) << 4;// return 2|3<<4;
0000 0010 | 00110000 = 0011 0010
不就是 0x32 么? //上面的两个BCD()调用有先后区别吗?怎么区分的?谢谢!
如:volatile int Data;
编译器就不会随便对变量Data作优化了。