Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2315273
  • 博文数量: 527
  • 博客积分: 10343
  • 博客等级: 上将
  • 技术积分: 5565
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-26 23:05
文章分类

全部博文(527)

文章存档

2014年(4)

2012年(13)

2011年(19)

2010年(91)

2009年(136)

2008年(142)

2007年(80)

2006年(29)

2005年(13)

我的朋友

分类: WINDOWS

2008-04-16 15:50:44

基于VS2003所带VC 7编译器.

/RTCc  编译选项干了什么事?
MSDN说:
Reports when a value is assigned to a smaller data type and results in a data loss. For example, if a value of type short 0x101 is assigned to a variable of type char.

实测一下效果:


以上是调试窗口中的显示, 其实很简单, 在每个需要 truncate后赋值的地方调用一个 _RTC_Check_4_to_1函数. 其它的估计还有_RTC_Check_4_to_1 什么的.

如果程序以 /RTCc 选项编译了, 就会出现下面的错误窗口, 看起来很严重的那种:

从这个人造的例子引起windows的 DWWIN错误可以说明一点, 就是这个看似可怕的窗口可能只是程序中一个未处理的异常所引起的, 错误未必有致使的原因(但是有致使的结果)

既然是未处理异常生成的, 那么这样的异常只要被程序捕获并处理, 就不会出来这个对话框:



int main()
{
  int i = 0x101;
  __try {
  char c= (char)i;
  }
  __except( EXCEPTION_EXECUTE_HANDLER )
  {
    puts("in catch");
  }
  puts("OK");
  return 0;
}


程序改成这样就不会前面那个可怕的对话框了, 注意try catch(...)不行. 因为它只捕获C++的throw扔出来的异常.
阅读(716) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~