从 C++ Builder XE 换回 2010 了,XE 的 BUG 无法处理。

std::coding::peasant 2010-11-04 01:07:16
发现 C++ Builder XE 两个 BUG,其中第一个无法忍受,第二个可以找别的函数代替。

一. try...catch 某些情况下不好用了,无法捕获错误
也许 Embarcadero 把这些错误处理改变了方式,但是没找到任何有关的说明,目前情况就是XE无法处理这些异常。

1. XE处理日期的函数,FormatDateTime,DecodeDateTime,DayOf 等,如果日期无效,程序运行时会弹错误窗口,这个错误无法捕获,无法控制程序弹窗,但是在以往版本就没问题,例如:

try
{
FormatDateTime(1e111);
}
catch(...)
{
}

2. XE整数异常无法捕获,但是以往版本就没问题,例如:

try
{
int a = 0;
Caption = 1/a;
}
catch(...)
{
}

二. 几个字符串转 long long 型的函数无法得到正确的结果,而在以往版本就没问题:
1. long long strtoll(const char * __s, char * *__endptr, int __radix);
2. unsigned long long strtoull(const char * __s, char * *__endptr, int __radix);
3. long long wcstoll(const wchar_t * __s, wchar_t * *__endptr, int __radix);
4. unsigned long long wcstoull(const wchar_t * __s, wchar_t * *__endptr, int __radix);

例如:
char *string = "12345678900", *endptr;
long long llnumber = strtoll(string,&endptr,0);
printf("%s=%Ld\n",string,llnumber);
在2010里面运行,就得到结果 12345678900 但是在 XE 里面运行,得不到正确结果。
...全文
1495 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
redleaves 2010-11-11
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 ybchen 的回复:]第一个问题,如果我有复杂的运算,加减乘除都有,那怎么办?难道我每一步中间结果都要判断取值范围能不能继续运算?判断语句消耗的时间比计算的时间还长,那样计算速度会慢很多倍的。

第二个问题,那个 radix 无论改成 10 还是 0 还是 16 都不正常的,那个版本的那个函数有问题的。C++ 帮助里面明确写了如果 radix 等于 0 的时候会根据字符串的开始几个字符判断进制,是 0x 开头还是 0~9。[/Quote]
先说第二个问题.c++ builder自己扩展的strtoll的确无法正确的处理超过long范围的数据.应该是BUG.我没有测试就发言实在是不可取的(因为我根本就不用C++ Builder..^_^,仅仅是根据楼主提供的信息做了判断)
再说第一个问题.还是上面那些原因.这种异常支持是"非标准"的.在代码里使用这种技术很容易引起兼容性问题.否则,换个编译器,或是编译器更新版本就会引起问题.再说性能问题.事实上,判断语句的开销远小于除法运算.仅仅和异常的注册机制开销相比就差了十万八千里.而且对于可预期的输入,其中间过程也应该是可预期的.并不是每一步都需要检查.只是要多费些脑筋而已.另外:文档和实现经常会有对不上的情况出现.不知道是文档太老还是实现有BUG.但它现在的实在确实是在向标准靠拢了~~^_^
据我的测试,2011版的C++ Builder编译器在实现上有不少改进.比以前更接近C++标准.而楼主所说的这几个问题都是在CRT里实现的.但2011版却没提供CRT的源代码.如果你用2011版的编译器,自己编译2010版的CRT,不知道能否解决这些问题.值得一试...
说实在的,我现在收藏C++Builder的编译器仅做怀念用...
  • 打赏
  • 举报
回复
C++ Builder 帮助里面明确的写了,整数被零除异常是 EDivByZero,浮点数被零除是 EZeroDivide,可以通过 try ... catch 捕获。
亮剑_ 2010-11-10
  • 打赏
  • 举报
回复
SP1后可能会好一些
zhanghelpsgz 2010-11-10
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!
ccrun.com 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 hind24 的回复:]
引用 8 楼 zzbinfo 的回复:

我可是纯爷们的说,不过silverpot可能就是个mm了
据说也是个爷们
[/Quote]

管他男女呢,做IT技术,性别根本无所谓的。
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 redleaves 的回复:]
系统层面的异常无法捕获才是正确的...C++的异常机制原本就不应该处理这些系统层面的异常.要处理这些异常,应该使用系统层面的异常处理机制.比如win32提供的SEH.
正因为使用了这种"非标准"的异常处理功能,所以楼主才会写出这种"有问题"的代码.

而第二个问题,应该还是楼主的错.radix参数因应该是一个正确的进制值.取值范围应该是2到30几.你传个0进去.按里说应该返回出错或是直接崩溃……
[/Quote]

第一个问题,如果我有复杂的运算,加减乘除都有,那怎么办?难道我每一步中间结果都要判断取值范围能不能继续运算?判断语句消耗的时间比计算的时间还长,那样计算速度会慢很多倍的。

第二个问题,那个 radix 无论改成 10 还是 0 还是 16 都不正常的,那个版本的那个函数有问题的。C++ 帮助里面明确写了如果 radix 等于 0 的时候会根据字符串的开始几个字符判断进制,是 0x 开头还是 0~9。
redleaves 2010-11-10
  • 打赏
  • 举报
回复
系统层面的异常无法捕获才是正确的...C++的异常机制原本就不应该处理这些系统层面的异常.要处理这些异常,应该使用系统层面的异常处理机制.比如win32提供的SEH.
正因为使用了这种"非标准"的异常处理功能,所以楼主才会写出这种"有问题"的代码.

而第二个问题,应该还是楼主的错.radix参数因应该是一个正确的进制值.取值范围应该是2到30几.你传个0进去.按里说应该返回出错或是直接崩溃(C的库函数就这种风格,对参数的值只做约定,从不检查)的.至于旧版的库能返回正确值...这应该算是个BUG.否则楼主也不会这样用这些函数了...
hind24 2010-11-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zzbinfo 的回复:]

我可是纯爷们的说,不过silverpot可能就是个mm了
[/Quote]据说也是个爷们
一木浮生 2010-11-08
  • 打赏
  • 举报
回复
瞻仰最新技术的更新
土著巫师 2010-11-08
  • 打赏
  • 举报
回复
捡了一个被0整除的测试了一把,还真是有楼主说的问题,昏倒。
xuzhu3000 2010-11-07
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 hemiya 的回复:]
引用 23 楼 waiting4you 的回复:

我装了南果梨封装的C++Builder2010,很不错的说,组件全,安装快,补丁也打到Up5了.
在这里帮南果梨广告一下,呵呵
http://topic.csdn.net/u/20100924/12/4469bf1d-8df1-4aa4-9a5a-0225e6bdccef.html
[/Quote]
GoAwayZ 2010-11-07
  • 打赏
  • 举报
回复
hemiya 2010-11-05
  • 打赏
  • 举报
回复
牧牛童子 2010-11-05
  • 打赏
  • 举报
回复
喝茶喽!沏上等毛尖一壶!
jn981 2010-11-05
  • 打赏
  • 举报
回复
哦,还好没下载~~~
ydlchina 2010-11-05
  • 打赏
  • 举报
回复
hemiya 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 waiting4you 的回复:]

我装了南果梨封装的C++Builder2010,很不错的说,组件全,安装快,补丁也打到Up5了.
在这里帮南果梨广告一下,呵呵
http://topic.csdn.net/u/20100924/12/4469bf1d-8df1-4aa4-9a5a-0225e6bdccef.html
[/Quote]
dfdscx 2010-11-05
  • 打赏
  • 举报
回复
2010up1就是杯具,不知道xe的up1怎么样
laowang2 2010-11-05
  • 打赏
  • 举报
回复
学习来了。
Waiting4you 2010-11-05
  • 打赏
  • 举报
回复
我装了南果梨封装的C++Builder2010,很不错的说,组件全,安装快,补丁也打到Up5了.
在这里帮南果梨广告一下,呵呵
http://topic.csdn.net/u/20100924/12/4469bf1d-8df1-4aa4-9a5a-0225e6bdccef.html
加载更多回复(17)

552

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧