标题
Delphi程序员眼中的C/C++之1000个错误与陷井[绝对原创]
clq
浏览(0) +
2005-04-08 22:04:37 发表
编辑
关键字:
象我们这样以delphi起家的程序员然后转为C++的,在中国实在不少。C/C++无疑很强悍,但是在我们眼中也有很多古怪的错误与陷井。有时这种错误让人发狂...其实它可能仅仅是一个编译选项/参数的设置而已。
clq
1.
首先在有一个观念delphi一切问题由代码解决,如果你错了,那么就是你错了,请修改代码。但在C++中,编译器的设置极其重要。你找不到代码的错误,你百思不得其解,你崩溃欲回家卖红薯时,请到网上找找与你一样的[呈经]哥们,他们会告诉你他们因为某个编译选项没有做而XXX的血泪史 [s:7]
下面就是一个:devc++中为什么老是编译不了用了socket的程序,原因是你要在在项目属性“参数”的“连接器”中加入“-lwsock32”使GCC[DEV C++]支持socket。
原理是C++要在编译的最后一步中链接所谓的“库”,这就是告诉它库在哪里。VC中了有相应的设置,不过大家可能都知道了,我就不再啰嗦。
clq
2.
为什么我的程序很容易就over,try了半天也不行?
原因是出错即退出整个程序是C++或者说标准C++的规范[当然有办法改,不过我还不会,因为声称可行的办法我一个都没试通],目前的办法只能是写出强壮的代码,喜欢在delphi中try的朋友肯定很不高兴:)
catch(...)并不象它说的那样能捕获所有的异常,据说是为了性能,有些是不catch的,不过VC有一些特殊的修改之处,它的debug版本还是能catch不少的,不过r..版本就...我用GCC则是根本不能。
clq
比如如下代码:
[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
3.
float f = 3/2;
啊?它的结果怎么是整数!!!
在delphi及大多数语言里这样是应该得到1.5的,但c/c++是1!为什么?
原因是c/c++中浮点数相除才能得到浮点数,所以上面的例子要改为
float f = (float)3/2; //当然实际应用最好用double
这是个非常大的陷井哪!
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.