好学IT学院:IT信息技术分享交流平台
标签:C++  来源:PConline  作者:宋宝华  发布时间:2009-05-17  ★★★加入收藏〗〖手机版
精华推荐:C++编程新手错误语录
摘要:1.引言还记得当年学数学、英语都有个窍门,那就是搞个错题集。经常复习一下这个错题集,就可以避免下次犯同样的错误。而几乎所有的程序员都是从犯错误开始的,我们也很有必要总结一下编程新手的常见错误,本文的目的在于此。文中所列出的都是笔者在项目开发……

(15)“C不高级,学C++、JAVA、C#才够味”

也许谭浩强老师的C语言教材是绝大多数高校学生学习的第一门编程课程,所以在许多学生的心目中,觉得C是一种入门级的语言,他们舍弃基础而追逐花哨的Visual XXX、Java、ASP、PHP、.net,他们以为这样做“赚大了”。

非也!

C是一种多么富有魅力的语言!在今时的绝对多数底层开发中,仍然几乎被C完全垄断。这些领域包括操作系统、嵌入式系统、数字信号处理等。舍弃C的经济基础搭.net的高层建筑实在是危险。

我们总是以为自己掌握了C,那么请写一个strcpy的标准函数。您的答案若是:

void strcpy( char *strDest, char *strSrc )
{
  while( (*strDest++ = * strSrc++) != ‘\0’ );
}

很遗憾,您的程序只能拿到E。看看拿A的strcpy:

char * strcpy( char *strDest, const char *strSrc )
{
 assert( (strDest != NULL) && (strSrc != NULL) );
char *address = strDest;
 while( (*strDest++ = * strSrc++) != ‘\0’ );
return address;
}

这个程序考虑了什么?

(1)程序要强大:为了实现链式操作,将目的地址返回,函数返回类型改为char *

(2)程序要可读:源字符串指针参数加const限制,表明为输入参数

(3)程序要健壮:验证strDest和strSrc非空

如果这三点中您只考虑到0点或1点,那么请回家好好修炼一下C。因为这个最简单的strcpy已验证出您的C语言基础只能叫做“入门”。

再写个简单的strlen,这么写就好了:

int strlen( const char *str ) //输入参数为const
{
assert( strt != NULL ); //断言字符串地址非0
int len;
while( (*str++) != '\0' )
{
len++;
}
return len;
}

由此可见,写好这些简单的函数也需要深厚的基本功,永远不要放弃对基本功的培养。

(16)“语言学得越多越好”

许多的初学者都经历过这样的一个阶段,面对大量的编程语言和开发环境,他们俩感到难以取舍,不知道自己究竟应该学习什么。于是他们什么都学,今天看一下Visual Basic,明天看学一下C++,后天在书点看到了本Java便心血来潮买回来翻翻,大后天又发现必须学.net了。他们很痛苦,什么都在看,结果什么都没学会,忙忙碌碌而收获甚微。

我们真的没有必要在什么语言都不甚精通的情况下乱看一气。认准了一种真正语言就应该坚持不懈地努力。因为任何一门语言的掌握都非一朝一夕一事,笔者从六年前开始接触C++,直到现在,每一阶段仍有新的启发,在项目开发的过程中也不断有新的收获。今日我还是绝对不敢宣称自己“精通”这门语言。

许多刚毕业的大学生,动不动就在简历上写上自己精通一堆语言。与之相反,大多数优秀的工程师都不敢这么写。也许,研究越深,便越敢自身的无知。

在下认为,一个成熟的语言体系应该是:

程序员的语言体系 = 一种汇编 + C + 一种面向对象(C++、JAVA、C#等)

如果还要加,那就加一种解释型语言,perl或tcl(也许其它)。

语言具有极大的相似性,从C++过渡到JAVA只需要很短的一段时间。各种语言的发展历史也体现了编程思想的发展史。我们学习一种语言,语法也许并不是最重要的,最重要的是蕴藏在语法外表下的深层特性和设计用意。

本回书着落此处,更多错误语录,当然是待续。

  • 好学触屏公众号虎力全开、杨帆起航!
  • 好学考试H5触屏版开放内测