CC++编程新手错误语录,第1张

CC++编程新手错误语录,第2张

介绍

还记得当年学数学英语有一招,就是做错题集。经常复习这套错题,下次就可以避免犯同样的错误。几乎所有的程序员都是从犯错开始的,所以我们有必要总结一下新程序员的常见错误。本文的目的就是要做到这一点。本文列举的都是我在项目开发中接触到的新手的真心话。我是学口音的,姑且称之为“错误语录”。

2.行情

(1)“我的程序都是正确的,但结果是错误的”

想想你周围的环境。人们会说这样的话吗?如果你之前已经说过了,就此打住,不要再说了,因为这样只会显得说话者的无知。既然程序都是对的,为什么结果是错的?

(2)“程序=算法+数据结构”

如果我们刚刚学完C语言,我们说这样的话是完全可以理解的,也是正确的。但如果你是一个会从事C/C++编程的程序员,那么很遗憾,这个说法只能被判断为错误。众所周知,世界上还有一种说法:

程序=对象+消息

“程序=算法+数据结构”只对面向过程的语言(C)成立,而对于面向对象的语言(C++),只能表示为“程序=对象+消息”。传统的过程式编程语言是以进程为中心、算法驱动的,面向对象编程语言是以对象为中心、消息驱动的。这里的信息是概括的。对象A调用对象B的成员函数,可以看作是对象A向B发送消息。

(3)“只需编译程序并正确运行即可”

运行正确的程序不一定是好程序。程序员要时刻牢记的一点是,自己写的程序不仅是给自己看的,也是让别人容易理解的。遗憾的是,很多新程序员无法清晰掌控软件的结构,对头文件和实现文件的概念模糊不清,写出来的程序可读性很差。

c程序采用模块化的编程思想,需要将一个大的软件合理的划分成一系列功能独立的部分来协同完成系统的要求。模块的划分主要是基于功能。该模块由头文件和实现文件组成。头文件和实现文件的正确使用方法是:

1规则头文件(。h)是这个模块的接口的声明,包括这个模块提供给其他模块调用的外部函数和外部全局变量。这些变量和函数应该在的文件中用关键字extern声明。h;

2规则模块中的函数和全局变量应该在。c文件;

规则3永远不要在。h档;

许多程序员对定义变量和声明变量感到困惑。定义变量和声明变量的区别在于定义会产生内存分配的操作,这是汇编阶段的概念。声明只是告诉包含声明的模块在连接阶段从其他模块中寻找外部函数和变量。比如:

/*模块1的头文件:module 1 . h */
int a = 5;/*在中定义int a */
/*模块1的h文件。模块1实现文件:Module 1 . c */
# Include " Module 1 . h "/* Include。模块1中模块1的h文件*/
/*模块2实现文件:模块2包含" module1.h"/*包含。模块2中模块1的h文件*/
/*模块2实现文件:Module 3 . c */
# include " Module 1 . h "/*包含。模块3中模块1的h文件*/

上述程序的结果是,整型变量A在模块1、2、3中定义,A在不同的模块中对应不同的地址单元,这显然不符合作者的初衷。正确的做法是:

/*模块1的头文件:module 1 . h */
extern int a;中声明int a */
/*。模块1的h文件。模块1实现文件:module 1 . c */
# include " module 1 . h "/* include。模块1中模块1的h文件*/
int a = 5;/*在中定义int a */
/*模块2实现文件。模块1的c文件:module 2 . c */
# include " module 1 . h "/* include。模块2中模块1的h文件*/
/*模块3实现文件:模块3

这样,如果模块1、2和3操作A,它们对应于同一个存储单元。

4如果要使用其他模块定义的变量和函数,可以直接包含它们的头文件。

很多程序员都喜欢这么做。当他们想要访问由其他模块定义的变量时,他们在该模块文件的开头添加以下语句:

extern int externVar

摒弃这种做法。只要头文件按照规则1完成,当一个模块想要访问其他模块中定义的全局变量时,只需要包含该模块的头文件即可。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » CC++编程新手错误语录

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情