登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> 程序员学前班[不再更新,只读] >> 主题: Delphi程序员眼中的C/C++之1000个错误与陷井[绝对原创]     [回主站]     [分站链接]
标题
Delphi程序员眼中的C/C++之1000个错误与陷井[绝对原创]
clq
浏览(0) + 2005-04-08 22:04:37 发表 编辑

关键字:

象我们这样以delphi起家的程序员然后转为C++的,在中国实在不少。C/C++无疑很强悍,但是在我们眼中也有很多古怪的错误与陷井。有时这种错误让人发狂...其实它可能仅仅是一个编译选项/参数的设置而已。
clq
2005-4-8 22:16:43 发表 编辑

1.
首先在有一个观念delphi一切问题由代码解决,如果你错了,那么就是你错了,请修改代码。但在C++中,编译器的设置极其重要。你找不到代码的错误,你百思不得其解,你崩溃欲回家卖红薯时,请到网上找找与你一样的[呈经]哥们,他们会告诉你他们因为某个编译选项没有做而XXX的血泪史 [s:7]

下面就是一个:devc++中为什么老是编译不了用了socket的程序,原因是你要在在项目属性“参数”的“连接器”中加入“-lwsock32”使GCC[DEV C++]支持socket。

原理是C++要在编译的最后一步中链接所谓的“库”,这就是告诉它库在哪里。VC中了有相应的设置,不过大家可能都知道了,我就不再啰嗦。

clq
2005-4-8 22:22:47 发表 编辑

2.
为什么我的程序很容易就over,try了半天也不行?
原因是出错即退出整个程序是C++或者说标准C++的规范[当然有办法改,不过我还不会,因为声称可行的办法我一个都没试通],目前的办法只能是写出强壮的代码,喜欢在delphi中try的朋友肯定很不高兴:)

catch(...)并不象它说的那样能捕获所有的异常,据说是为了性能,有些是不catch的,不过VC有一些特殊的修改之处,它的debug版本还是能catch不少的,不过r..版本就...我用GCC则是根本不能。

clq
2005-4-8 22:26:44 发表 编辑

比如如下代码:
[code]
  try
  {
        //char * s ;//= NULL;
        char * s ;//= NULL;
        //*s = 's';
        int i2 = 0;
        int i = 2/i2;
        i = 3;
  }
  catch(...)
  {
    //在VC下可以捕捉到错误,在dev c++[GCC]下却是不行的
    printf("memo error\r\n");
  }
[/code]

clq
2005-4-14 22:11:31 发表 编辑

3.
float f = 3/2;
啊?它的结果怎么是整数!!!
在delphi及大多数语言里这样是应该得到1.5的,但c/c++是1!为什么?

原因是c/c++中浮点数相除才能得到浮点数,所以上面的例子要改为
float f = (float)3/2; //当然实际应用最好用double

这是个非常大的陷井哪!

clq
2005-5-8 22:18:58 发表 编辑

4.
VC中ComboBox下拉框的高度是由控件本身的高度来控制的。可参见如下连接。
http://www.china-askpro.com/msg25/qa70.shtml
http://www.china-askpro.com/msg21/qa56.shtml
http://www.china-askpro.com/msg25/qa56.shtml

当然了这其实是windows的事,只不过delphi进行了完善的封装,而VC则是“放任自流”而已。

不过,这确实是令初学者头痛的问题。


总数:5 页次:1/1 首页 尾页  
总数:5 页次:1/1 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1